9

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

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

这个 Q 必须在 SO 上的某个地方,但我的 search-fu 不适用于这个。对不起

4

5 回答 5

15

假设您正在谈论 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语句没有andor运算符,所以你必须编写嵌套if语句(这可能导致在thenelse子句中重复代码),或者将表达式结果捕获到变量中然后if对其值进行声明(更多行)。我赞成第二种方法以避免重复代码。也许这都是一个安全功能。:)

我在这里这里 (SO, even)找到了一些很好的例子。help if但是您也可以只使用 shell(或if /?IIRC)中内置的帮助系统。

于 2013-01-30T20:36:43.957 回答
6

@Randall Cook相当不错的建议的替代方案可能是这样的:

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

:cont
get on with other stuff
于 2013-01-30T23:40:07.163 回答
6
IF EXIST A (
    IF EXIST B (
        ECHO A and B exist
        )
    )
于 2013-01-31T06:21:22.410 回答
1

自从@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
于 2016-02-29T22:13:04.500 回答
0
set /p k="Please enter Choice : "

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

:A echo "来自 A 的你好" :B echo "来自 B 的你好"

于 2016-02-26T11:56:00.880 回答