启用延迟扩展不起作用

时间:2016-08-06 14:43:40

标签: windows batch-file windows-10 command-prompt

我的批处理程序中出现了一个奇怪的错误。我认为问题在于启用延迟扩展,但我应用的修复程序不起作用。这是我的代码:

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!在控制台中。

2 个答案:

答案 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 /?   有关详细信息。

     

如果启用了延迟的环境变量扩展,则感叹号   字符可以用来替代环境变量的值   在执行时。