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