你有2个问题。
1)%ifpath%
必须引用你的,因为它包含空格。没有引号, IF EXIST 认为名称停止第一个空格。
2) 批处理解析器不知道 SET 命令的值何时结束。它将 ELSE 子句视为值的一部分。这很容易用括号解决。
set "ifpath=C:\Program Files\App"
if exist "%ifpath%" (SET ppath=C:\Program Files) ELSE SET ppath=C:\Program Files(x86)
echo "%ppath%\App"
让我们假设您颠倒了测试并从(x86)
版本开始。简单地添加括号并不能解决问题,因为解析器会认为该值以(x86)
. 这可以通过转义来解决:
set "ifpath=C:\Program Files(x86)\App"
if exist "%ifpath%" (SET ppath=C:\Program Files(x86^)) ELSE SET ppath=C:\Program Files
echo "%ppath%\App"
或者更好的方法是使用引号:
set "ifpath=C:\Program Files(x86)\App"
if exist "%ifpath%" (SET "ppath=C:\Program Files(x86)") ELSE SET "ppath=C:\Program Files"
echo "%ppath%\App"