Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 批处理脚本未将变量设置为值_Windows_Batch File - Fatal编程技术网

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”不是命令。解决方法是用引号将名称括起来。