我已经阅读了许多关于让 Windows 批处理文件解析器正确处理具有空格、括号和其他特殊字符的变量的不同方法的线程,但似乎没有一个建议能够解决我遇到的问题。
这是脚本(在尝试任何解决方法之前),其目标是根据为 variable01 和 variable02 找到的值设置 variable03 的值:
set variable01="C:\Program Files (x86)\SomeProgram\Subfolder"
set variable02="${macro}"
set variable01=%variable01:"=%
set variable02=%variable02:"=%
set variable03=""
if %variable02:~0,1%==$ (
if %variable01:~0,1%==$ (
set variable03=%variable03:"=%
) else (
set variable03=-o '%variable01%'
)
)
... variable01 和 variable02 的值事先不知道 - 它们在运行脚本之前被另一个程序替换,所以上面的脚本显示了 variable01 和 variable02 在替换完成后的一组示例值。
这个脚本运行时我得到的错误是:
\SomeProgram\Subfolder' was unexpected at this time.
...对应于上述脚本中的最后一个“设置”行。我认为这个错误是由于 variable01 的值中的括号造成的。
如果我将该行更改为:
set "variable03=-o '%variable01%'"
...然后我收到此错误:
Files was unexpected at this time.
...这似乎表明它正在尝试对变量 01 中的空格进行标记,并且解析器仍然不满意。
如果我在脚本顶部添加这一行:
setlocal enableextensions enableDelayedExpansion
...并将 %variable01% 更改为 !variable01!,我仍然得到同样的错误。
显然,我不明白批处理文件解析器需要什么才能满足我的要求,即 variable03 的值具有以下值:
-o 'C:\Program Files (x86)\SomeProgram\Subfolder'
...有什么建议么?