为什么我不能在批处理/ cmd文件中将if exists语句嵌套在此代码中

时间:2017-08-24 10:22:33

标签: windows batch-file if-statement command-line cmd

我目前正在编写一个简短的命令行实用程序来快速安装/卸载程序,并且需要首先确定存在安装文件,以便在不满足条件时提供有意义的错误消息。

我目前编写以下代码

@echo off
setlocal EnableExtensions

echo.
echo 1.Run Program1
echo 2.Summit else
echo 3.Summit else
echo 4.Summit else
echo 5.Summit else
echo.

set /p a= Enter Choice: 

if %a%==1(
if exist program1.cmd(
    rem program1 exists
    echo "Run program1.cmd"
    ) else(
    rem program1 does not exist
    echo "program1 does not exist"
    ))
pause

我目前被告知"命令的语法不正确。"无论Program.cmd是否存在,但我都不明白为什么。

如果在批处理/ cmd文件中无法执行命令,或者我是否从根本上误解了windows命令行语法中的内容,那么是否正在嵌套。

1 个答案:

答案 0 :(得分:1)

可以嵌套if / for命令,但cmd 非常非常挑剔空间 - 一个更少或更多的空间可能会崩溃脚本很容易。

这是固定代码。

if "%a%"=="1" (
    if exist program1.cmd (
        rem program1 exists
        echo "Run program1.cmd"
          ) else (
        rem program1 does not exist
        echo "program1 does not exist"
    )
)

请查看我和您的if语句语法之间的差异。另外,if %a%==1可以(并且应该是非强制性的)更改为if "%a%"=="1",以便进行更安全的比较。

我们为什么要更改为使用引号(")?考虑你不小心输入了一个空间。 CMD会看到:

if  ==1 (

它不明白。