[英]Batch %time% env variable - Issue
我在FOR循環中打印環境變量%time%有問題。 我不確定它是否與setlocal enabledelayedexpansion有關,但似乎與此有關。
我試圖在CMD.exe而不是.bat腳本中弄清楚這一點。
沒有setlocal enabledelayedexpansion,它看起來像:
C:\Users\dabaran\Desktop\cs50\src\C>for /L %i in (1,1,3) do echo [%time%]
C:\Users\dabaran\Desktop\cs50\src\C>echo [21:47:27,19]
[21:47:27,19]
C:\Users\dabaran\Desktop\cs50\src\C>echo [21:47:27,19]
[21:47:27,19]
C:\Users\dabaran\Desktop\cs50\src\C>echo [21:47:27,19]
[21:47:27,19]
C:\Users\dabaran\Desktop\cs50\src\C>
如果我嘗試使用setlocal enabledelayedexpansion,則如下所示:
C:\Users\dabaran\Desktop\cs50\src\C>Setlocal EnableDelayedExpansion
C:\Users\dabaran\Desktop\cs50\src\C>for /L %i in (1,1,3) do echo !time!
C:\Users\dabaran\Desktop\cs50\src\C>echo !time!
!time!
C:\Users\dabaran\Desktop\cs50\src\C>echo !time!
!time!
C:\Users\dabaran\Desktop\cs50\src\C>echo !time!
!time!
C:\Users\dabaran\Desktop\cs50\src\C>
我也嘗試使用超時,以便在for循環的不同迭代之間創建一些延遲,但是時間仍未更新。
不明白為什么時間變量沒有被擴展! 而是存儲為字符串。
謝謝。
最好的問候,達米安·巴蘭(Damian Baran)
如上所述,默認情況下,setlocal僅適用於批處理文件。 但是,如果要在命令提示符下使用它,則可以創建和修改注冊表項,並將其與cmd.exe結合使用。 見下文。
也可以在HKLM或HKCU下的注冊表中設置EnableDelayedExpansion:
[HKEY_CURRENT_USER\Software\Microsoft\Command Processor]
"DelayedExpansion"= (REG_DWORD)
1=enabled 0=disabled (default)
范例-
C:\>reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor" /V Delayedexpansion
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor
Delayedexpansion REG_DWORD 0x1
C:\>for /L %i in (1,1,5) do echo !time!
C:\>echo !time!
54:23.9
C:\>echo !time!
54:23.9
C:\>echo !time!
54:23.9
C:\>echo !time!
54:23.9
C:\>echo !time!
54:23.9
使用默認注冊表設置
C:\>reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor" /V Delayedexpansion
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor
Delayedexpansion REG_DWORD 0x0
C:\>for /L %i in (1,1,5) do echo !time!
C:\>echo !time!
!time!
C:\>echo !time!
!time!
C:\>echo !time!
!time!
C:\>echo !time!
!time!
C:\>echo !time!
!time!
如在setlocal /?
:
在批處理文件中開始本地化環境更改...
因此,setlocal命令對命令提示符沒有直接影響,因此,在您的情況下,感嘆號不過是一個字符串而已。
如果您啟用延遲的擴展並在批處理文件中使用感嘆號,它將同樣有效。
好的,我認為我在這里找到了評論問題的答案: 擴展命令提示符的環境變量
感謝您的及時幫助和答復Rafael。
總結一下:
您應該如何進行?
我的輸出現在看起來不錯:
C:\Windows\system32>for /L %i in (1,1,5) do echo !time!
C:\Windows\system32>echo !time!
22:56:37,71
C:\Windows\system32>echo !time!
22:56:37,73
C:\Windows\system32>echo !time!
22:56:37,77
C:\Windows\system32>echo !time!
22:56:37,78
C:\Windows\system32>echo !time!
22:56:37,79
C:\Windows\system32>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.