我已经阅读了许多有关如何正确处理具有空格、括号和其他特殊字符的变量的 Windows 批处理解析器的不同方法,但没有一项建议似乎能够解决我遇到的问题。
以下是脚本(在尝试任何解决方法之前),其目标是根据找到的 variable01 和 variable02 的值为 variable03 设置一个值:
以下是脚本(在尝试任何解决方法之前),其目标是根据找到的 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.
...这对应于上面脚本中的最后一行“set”语句。我认为这个错误是由variable01变量值中的括号引起的。
如果我将该行更改为:
set "variable03=-o '%variable01%'"
...然后我遇到了这个错误:
Files was unexpected at this time.
看起来它试图在variable01中的空格上进行标记化,但解析器仍然不满意。
如果我在脚本顶部添加这一行:
setlocal enableextensions enableDelayedExpansion
即使我将%variable01%更改为!variable01!,仍然得到相同的错误。
显然,我不明白批处理文件解析器需要满足我的要求,即变量03的值具有以下值:
-o 'C:\Program Files (x86)\SomeProgram\Subfolder'
你有什么建议吗?
set "var=She said: "Dog & Cat" to me"
,它可能是不安全的。但在这种情况下,仅针对路径应该是安全的。 - jeb%~dp0
的延迟扩展等效会是什么呢?!~dp0
不像一个变量,而!~dp0!
则为空字符串。(我正在尝试比较%CD%
与启动批处理文件的目录,以确保它们是相同的。) - Twisted Code