我已阅读了不同方法获取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并不是事先知道的 - 在运行脚本之前它们会被另一个程序替代,所以上面的脚本显示了在替换完成后变量01和变量02的一组示例值。
我得到当此脚本运行错误是:
\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'
...有什么建议?
感谢您的答复 - 这仍然会产生同样的错误,这可能是因为variable01还是会被在else子句的背景下展开。我想另一个选择是修改子程序,使其不需要参数,并为变量01和变量02的每个组合创建一个不同的子程序... – Hoobajoob 2013-02-25 21:18:35
Are you sure?我在你的问题中得到错误代码,但我没有用我的代码得到它。我只是将上述内容复制粘贴到我的记事本中,并试图确保我没有错别字。 – 2013-02-25 21:21:17
请注意'call:set3'行中的*双引号*。如果你使用单引号,你会得到错误。 – 2013-02-25 21:23:44