簡體   English   中英

批次%time%環境變量-問題

[英]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。

總結一下:

  1. setlocal僅在本地處理批處理文件(就像在docu setlocal /?中一樣)
  2. 如果要直接在命令提示符下測試延遲擴展,則需要使用上述URL中所述的正確參數啟動cmd.exe。

您應該如何進行?

  1. 使用以下命令(Windows運行)使用setlocal enableelayedexpansion打開cmd.exe:cmd.exe / V:ON
  2. 測試使用延遲擴展的代碼

我的輸出現在看起來不錯:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM