我正在爲我的IT部門編寫一個小庫存腳本,並且在嘗試節省自己一段時間時遇到了一個小絆腳石。批處理變量在執行時不擴展
我的目標是將當前位置存儲在臨時本地文件中(此批處理文件將在閃存驅動器上運行),以便在從一臺計算機移動到下一臺計算機時,只需更改位置即可不準確。基本上,如果我從A號樓1號單元3號廳開始,我只需確認什麼是正確的,然後改變什麼是不正確的。
也許位置確認碼可以讓您更好地瞭解這裏發生了什麼。
@echo off
setlocal
setlocal EnableDelayedExpansion
if not exist location.tmp (
echo , , > location.tmp
)
for /f "tokens=1-3 delims=," %%i in (location.tmp) do (
if not "%%i" == " " (
set unit=%%i
)
if not "%%j" == " " (
set building=%%j
)
if not "%%k" == " " (
set room=%%k
)
)
for %%i in (unit,building,room) do (
call :SUB_GET %%i
)
echo !unit!,!building!,!room!> location.tmp
endlocal
exit /b 0
:SUB_GET
if not defined %1 (
set /p %1=What %1?
goto :EOF
)
set /p new%1=What %1? (default is !%1!)
if not "!new%1!" == "" (
set %1=!new%1!
)
一切工作,除了當我試圖讓它保持默認。如果數值正確,我希望能夠按回車鍵(例如,「什麼房間?(默認爲403)」命中輸入,然後它保持403)
問題是,當我這樣做,即使代碼檢查新的環境變量(輸入)以查看它是否爲空,它仍然將新變量的值賦給新變量(空字符串)。
更令人困惑的是,如果我使用默認值(如1,A,4)創建一個現有的location.tmp,並按回車確認每一個,批處理語句echo !unit!,!building!,!room!>location.tmp
將執行,但location.tmp不變。
任何想法這裏發生了什麼?
哦哇,這簡化了事情。我永遠無法克服批處理腳本真的是多麼奇怪,毫無必要地令人費解,但也許有一天我會知道足夠不想一直尖叫它。謝謝! – Tyg13