Windows 批处理脚本未将变量设置为值
我打了这个,它根本不起作用Windows 批处理脚本未将变量设置为值,windows,batch-file,Windows,Batch File,我打了这个,它根本不起作用 set ifpath=C:\Program Files\App if exist %ifpath% SET ppath=C:\Program Files ELSE SET ppath=C:\Program Files(x86) echo "%ppath%\App" 很简单,但我花了几个小时试图让脚本正常工作。它在回音时总是漏掉ppath。如果我删除这些条件并简单地将ppath设置为路径,它就会显示出来 目标是检测程序文件(x86)是否存在,然后在存在时安装,否则
set ifpath=C:\Program Files\App
if exist %ifpath% SET ppath=C:\Program Files ELSE SET ppath=C:\Program Files(x86)
echo "%ppath%\App"
很简单,但我花了几个小时试图让脚本正常工作。它在回音时总是漏掉ppath。如果我删除这些条件并简单地将ppath设置为路径,它就会显示出来
目标是检测程序文件(x86)是否存在,然后在存在时安装,否则仅安装程序文件 您可以这样做:
if exist "%ifpath%" ( call :PF ) else ( call :PFx86 )
:PF
set "ppath=c:\Program Files"
goto :EOF
:PFx86
set "ppath=c:\Program Files(x86)"
goto :EOF
有时,当
if
和for
的模糊范围让我感到困惑时,我会调用类似的语句。我承认这是荒谬和浪费的,但是把一个创可贴放在你的生活上并继续前进是很好的。p> 您可以这样做:
if exist "%ifpath%" ( call :PF ) else ( call :PFx86 )
:PF
set "ppath=c:\Program Files"
goto :EOF
:PFx86
set "ppath=c:\Program Files(x86)"
goto :EOF
有时,当if
和for
的模糊范围让我感到困惑时,我会调用类似的语句。我承认这是荒谬和浪费的,但是把一个创可贴放在你的生活上并继续前进是很好的。p> 您有两个问题
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"
你有两个问题
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"
@netrox-没那么快。你还是有问题。您的IF语句可能总是返回FALSE。看还是不对。创建文件“A B.TXT”,然后运行如果存在A B.TXT(echo存在),否则echo不存在
。结果将是“不存在”,除非名为“A”的文件存在,否则将出现错误,说明“B.TXT”不是命令。解决方法是将名称用引号括起来。@netrox-不要这么快。你还是有问题。您的IF语句可能总是返回FALSE。看还是不对。创建文件“A B.TXT”,然后运行如果存在A B.TXT(echo存在),否则echo不存在
。结果将是“不存在”,除非名为“A”的文件存在,否则将出现错误,说明“B.TXT”不是命令。解决方法是用引号将名称括起来。