启用延迟扩展不起作用

pot*_*ato 1 windows batch-file command-prompt windows-10

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

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"


)
Run Code Online (Sandbox Code Playgroud)

ff 没有任何价值,尽管我使用了延迟扩展。解决办法是什么?

编辑:命令打印到控制台(我不使用@echo off)

   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"
    )
Run Code Online (Sandbox Code Playgroud)

有趣的是,它实际上按预期执行,尽管它打印了 !ff! 在控制台中。

jeb*_*jeb 5

!ff!修复了这个问题,因为延迟扩展使用感叹号而不是百分号。
延迟扩展模式不会改变扩展百分比,它增加了一种新的、更好的扩展方式。

默认情况下,延迟扩展处于禁用状态。
要在批处理文件中启用它,请使用

setlocal EnableDelayedExpansion
set "var=Hello world"
echo !var!
Run Code Online (Sandbox Code Playgroud)

注意:
在命令行上该命令setlocal EnableDelayedExpansion根本没有任何作用。
您可以通过启动一个新的 cmd.exe 实例来启用它cmd /v:on

  • 我使用的是 Win 10,并且使用“SETLOCAL EnableDelayedExpansion”我也得到了!ff!而不是扩展值。 (2认同)