SET 命令在 FOR 循環(huán)中失效 / SET 環(huán)境變量生存域/作用域 收藏
我在 FOR 循環(huán)中用 SET 為一個環(huán)境變量賦值,結(jié)果發(fā)現(xiàn)該變量始終為空內(nèi)容,不知何故
比如在下面的代碼中:
1、第一個 for 語句我是打算取得 YYMMDD 格式的日期,在 for 語句內(nèi)部的 SET TODAY_FOLDER 語句得不到 TODAY 的值,然而如果放在 for 語句后面就可以
2、第二、第三兩個嵌套 for 語句我打算得到一組 IP 地址,然而 echo 用戶端IP是%THE_CLIENT_IP% 得到的仍然是空的
代碼:
@echo off
FOR /F "tokens=1-3 delims=- " %%i IN ('date /t') DO (
SET TODAY=%%i%%j%%k
SET TODAY_FOLDER=%TODAY:~2%
)
REM 如果
REM SET TODAY_FOLDER=%TODAY:~2%
REM IP 段:15?-18?,其中 ? 取值范圍 [1-9](因每排只有 9 個)
for /L %%i in (5,1,8) do (
for /L %%j in (1,1,9) do (
SET THE_CLIENT_IP=192.168.115.1%%i%%j
echo %ERRORLEVEL% ClientIP=[%THE_CLIENT_IP%] 192.168.115.1%%i%%j
)
)
REM endlocal
@echo on
第二行這樣寫
FOR /F " usebackq tokens=1-3 delims=- " %%i IN (`date/t`) DO (
echo %ERRORLEVEL% ClientIP=[%THE_CLIENT_IP%] 192.168.115.1%%i%%j 字串8
改為:
cmd /v:on /c echo %ERRORLEVEL% ClientIP=[!THE_CLIENT_IP!] 192.168.115.1%%i%%j
cmd /v
@echo off
FOR /F "tokens=1-3 delims=- " %%i IN ('date /t') DO (
SET TODAY=%%i%%j%%k
echo !TODAY!
SET TODAY_FOLDER=!TODAY:~2!
echo !TODAY_FOLDER!
)
說白了就是啟用/v :on
用help cmd命令得到以下說明:
/V:ON 將 ! 作為定界符啟動延緩環(huán)境變量擴展。如: /V:ON 會允許 !var! 在執(zhí)行時允許 !var! 擴展變量 var。var 語法在輸入時擴展變量,這與在一個 FOR 循環(huán)內(nèi)不同。
延遲環(huán)境變量擴展不按默認值啟用。您可以用/V:ON 或 /V:OFF開關(guān),為 CMD.EXE 的某個調(diào)用而啟用或停用延遲環(huán)境變量擴展。
您可以在機器上和/或用戶登錄會話上啟用或停用 CMD.EXE 所有調(diào)用的延遲擴展,這要通過設置使用 REGEDT.EXE 的注冊表中的一個或兩個 REG_DWORD 值:
HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\DelayedExpansion
和/或
HKEY_CURRENT_USER\Software\Microsoft\Command Processor\DelayedExpansion
到 0x1 或 0x0。用戶特定設置比機器設置有優(yōu)先權(quán)。命令行開關(guān)比注冊表設置有優(yōu)先權(quán)。
如果延遲環(huán)境變量擴展被啟用,驚嘆號字符可在執(zhí)行時間,被用來代替一個環(huán)境變量的數(shù)值。
本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請
點擊舉報。