cmd:如果存在A和B那么

时间:2013-01-30 20:14:17

标签: if-statement batch-file cmd

CMD shell中IF AND的最简单和/或最易读的方法是什么?在伪代码中:

IF EXIST file1 AND file2:
   then do stuff
ELSE: 
   do something else

这个Q必须在SO的某个地方,但是我的搜索功能不适合这个。遗憾

5 个答案:

答案 0 :(得分:14)

假设你在谈论DOS / Windows批处理文件,我想你想要这样的东西:

SET do_stuff=false
IF EXIST file1 IF EXIST file2 SET do_stuff=true
IF "%do_stuff%"=="true" (
    REM do stuff
) ELSE (
    REM do something else
)

丑陋的来源是DOS批处理文件if语句没有以及运算符,因此您必须编写嵌套的{{ 1}}语句(可能导致然后 else 子句中的重复代码),或者将表达式结果捕获到变量中,然后执行if声明其价值(更多行)。我赞成第二种方法来避免重复代码。也许这都是一个安全功能。 :)

我找到了一些很好的例子herehere (SO, even)。但您也可以使用shell中内置的帮助系统(ifhelp if IIRC)。

答案 1 :(得分:5)

相当不错的suggestion by @Randall Cook的另一种选择可能是这样的:

IF EXIST file1 IF EXIST file2 (
  do stuff
  GOTO cont
)
do something else

:cont
get on with other stuff

答案 2 :(得分:4)

IF EXIST A (
    IF EXIST B (
        ECHO A and B exist
        )
    )

答案 3 :(得分:1)

我学到了一点,因为@RandallCook's answer对我来说是最好的。这就是我现在使用的:

@echo off
IF EXIST "File1" IF EXIST "File2" GOTO :do_stuff
GOTO :not_exist
GOTO :EOF

:do_stuff
    echo File1 and File2 exist.
    echo -- Doing stuff here...
    goto :EOF

:not_exist
    echo  Condition not met, not doing stuff.
    goto :EOF

:EOF一个预定义的标签,它将退出当前的子程序或脚本。

对于那些喜欢CALL而不是GOTO的人,因为它会导致更长的脚本中的代码更清晰,我们需要稍微复杂一点,但仍然可读:

@echo off
:: Successful CD resets errorlevel to 0, in case it was already set this shell
cd
IF EXIST "File1" IF EXIST "File2" CALL :do_stuff
IF ERRORLEVEL 10 GOTO :EOF
CALL :not_exist
GOTO :EOF

:do_stuff
    echo File1 and File2 exist.
    echo -- Doing stuff here...
    exit /b 10
    goto :EOF

:not_exist
    echo  Condition not met, not doing stuff.
    goto :EOF

答案 4 :(得分:0)

set /p k="Please enter Choice : "

如果"%k%" ==" A"转到A. 如果"%k%" ==" B"转到B

:甲     回声"你好A" :乙     回声"你好B"