在 CMD shell 中最简单和/或最易读的方法是IF
什么?AND
在伪代码中:
IF EXIST file1 AND file2:
then do stuff
ELSE:
do something else
这个 Q 必须在 SO 上的某个地方,但我的 search-fu 不适用于这个。对不起
在 CMD shell 中最简单和/或最易读的方法是IF
什么?AND
在伪代码中:
IF EXIST file1 AND file2:
then do stuff
ELSE:
do something else
这个 Q 必须在 SO 上的某个地方,但我的 search-fu 不适用于这个。对不起
假设您正在谈论 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
语句没有and和or运算符,所以你必须编写嵌套if
语句(这可能导致在then和else子句中重复代码),或者将表达式结果捕获到变量中然后if
对其值进行声明(更多行)。我赞成第二种方法以避免重复代码。也许这都是一个安全功能。:)
我在这里和这里 (SO, even)找到了一些很好的例子。help if
但是您也可以只使用 shell(或if /?
IIRC)中内置的帮助系统。
@Randall Cook相当不错的建议的替代方案可能是这样的:
IF EXIST file1 IF EXIST file2 (
do stuff
GOTO cont
)
do something else
:cont
get on with other stuff
IF EXIST A (
IF EXIST B (
ECHO A and B exist
)
)
自从@RandallCook 的回答对我来说是最好的以来,我学到了一些东西。这就是我现在要使用的:
@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
set /p k="Please enter Choice : "
如果 "%k%" == "A" 转到 A 如果 "%k%" == "B" 转到 B
:A echo "来自 A 的你好" :B echo "来自 B 的你好"