CMD shell中IF
AND
的最简单和/或最易读的方法是什么?在伪代码中:
IF EXIST file1 AND file2:
then do stuff
ELSE:
do something else
这个Q必须在SO的某个地方,但是我的搜索功能不适合这个。遗憾
答案 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
声明其价值(更多行)。我赞成第二种方法来避免重复代码。也许这都是一个安全功能。 :)
我找到了一些很好的例子here和here (SO, even)。但您也可以使用shell中内置的帮助系统(if
或help 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"