我的批处理程序中出现了一个奇怪的错误。我认为问题在于启用延迟扩展,但我应用的修复程序不起作用。这是我的代码:
setlocal ENABLEDELAYEDEXPANSION
for /l %%x in (1, 1, 3) do (
set ff=Firefox_45_0.0_%%x
echo %%x
firefox.exe -CreateProfile "%ff% %homedrive%%homepath%\Desktop\Firefoxes\Profiles\Firefox_45_0.0_%%x"
)
虽然我使用了延迟扩展,但是没有任何价值。可能有什么问题?
编辑:打印到控制台的命令(我不使用@echo)
C:\Users\Home2\Desktop\Firefoxes\Versions\Firefox_45_0.0>(
set ff=Firefox_45_0.0_1
echo 1
firefox.exe -CreateProfile "!ff! C:\Users\Home2\Desktop\Firefoxes\Profiles\Firefox_45_0.0_1"
)
有趣的是它实际上按预期执行,虽然它打印!ff!在控制台中。
答案 0 :(得分:1)
!FF!修复它,因为延迟扩展使用感叹号而不是百分号 延迟扩展模式不会改变扩展百分比,它增加了一种新的更好的扩展方式
答案 1 :(得分:0)
从命令行在我测试的Win 10上,延迟的扩展不起作用。
SETLOCAL EnableDelayedExpansion
SETLOCAL EnableExtensions
下面的代码可以正常工作(回答问题),而不会延迟扩展:
for /l %x in (1, 1, 3) do (
rem set ff=Firefox_45_0.0_%x
echo Firefox_45_0.0_%x
firefox.exe -CreateProfile "Firefox_45_0.0_%x %homedrive%%homepath%\Desktop\Firefoxes\Profiles\Firefox_45_0.0_%x"
)
Win 10 CMD不允许在命令行上更改SETLOCAL。可以批量处理文件:
默认情况下不启用延迟的环境变量扩展。您 可以启用或禁用延迟的环境变量扩展 / V:ON或/ V:OFF开关对CMD.EXE的特定调用。您 可以启用或禁用对CMD.EXE的所有调用的延迟扩展 机器和/或用户登录会话,方法是设置 使用REGEDIT.EXE在注册表中输入以下REG_DWORD值:
HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\DelayedExpansion
and/or
HKEY_CURRENT_USER\Software\Microsoft\Command Processor\DelayedExpansion
为0x1或0x0。用户特定设置优先于 机器设置。命令行开关优先于 注册表设置。
在批处理文件中,SETLOCAL ENABLEDELAYEDEXPANSION或DISABLEDELAYEDEXPANSION 参数优先于/ V:ON或/ V:OFF开关。看到SETLOCAL /? 有关详细信息。
如果启用了延迟的环境变量扩展,则感叹号 字符可以用来替代环境变量的值 在执行时。