我在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循环的不同迭代之间创建一些延迟,但时间仍未更新。
不明白为什么时间变量没有被扩展!时间!而是存储为字符串。
谢谢。
最诚挚的问候, 达米安巴兰
答案 0 :(得分:2)
如上所述,默认情况下,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!
答案 1 :(得分:1)
与setlocal /?
:
在批处理文件 ...
中开始环境变更的本地化
因此,setlocal命令不会直接对命令提示符产生影响,因此感叹号在您的情况下不仅仅是 String 。
如果启用延迟扩展并在批处理文件中使用感叹号,它也可以正常工作。
答案 2 :(得分:1)
好的,我想我在这里找到了我的评论问题的答案: Expanding environment variables for command prompt
感谢您的出色帮助/回复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>