批处理脚本:此时\MyProg 出乎意料

Mik*_*e T 2 windows batch-file

我有一个简单的批处理脚本test.bat,它通过命令行参数进行迭代:

@echo off
set prefix=C:\Program Files\MyProg
for %%x in (%*) do (
    echo %prefix%
)
Run Code Online (Sandbox Code Playgroud)

这个版本的脚本在 cmd.exe 中没有问题:

C:\>test a b
C:\Program Files\MyProg
C:\Program Files\MyProg
Run Code Online (Sandbox Code Playgroud)

但是,如果我修改批处理文件以具有不同的prefix值,则添加(x86)

set prefix=C:\Program Files (x86)\MyProg
Run Code Online (Sandbox Code Playgroud)

脚本失败:

C:\>test a b
\MyProg was unexpected at this time.
Run Code Online (Sandbox Code Playgroud)

这悲剧!我该如何解决这个问题?

Mik*_*e T 5

启用EnableDelayedExpansionwith!prefix!解决了这个问题:

@echo off
set prefix=C:\Program Files (x86)\MyProg
setlocal EnableDelayedExpansion
for %%x in (%*) do (
    echo !prefix!
)
endlocal
Run Code Online (Sandbox Code Playgroud)

!逆天!