首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在批处理文件中使用if - else结构?

如何在批处理文件中使用if - else结构?
EN

Stack Overflow用户
提问于 2012-06-18 19:21:23
回答 6查看 827.5K关注 0票数 152

我有一个关于批处理文件中if - else结构的问题。每个命令都是单独运行的,但是我不能安全地使用"if - else“块,所以我的程序的这些部分不能工作。我怎样才能让这些部件运行起来呢?谢谢。

代码语言:javascript
复制
IF %F%==1 IF %C%==1 (
    ::copying the file c to d
    copy "%sourceFile%" "%destinationFile%"
    )
ELSE IF %F%==1 IF %C%==0 (
    ::moving the file c to d
    move "%sourceFile%" "%destinationFile%"
    )

ELSE IF %F%==0 IF %C%==1 (
    ::copying a directory c from d, /s:  boş olanlar hariç, /e:boş olanlar dahil
    xcopy "%sourceCopyDirectory%" "%destinationCopyDirectory%" /s/e
    )
ELSE IF %F%==0 IF %C%==0 (
    ::moving a directory
    xcopy /E "%sourceMoveDirectory%" "%destinationMoveDirectory%"
    rd /s /q "%sourceMoveDirectory%"
    )
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-06-18 19:29:11

您的语法不正确。您不能使用ELSE IF。看起来你并不是真的需要它。只需使用多条IF语句:

代码语言:javascript
复制
IF %F%==1 IF %C%==1 (
    ::copying the file c to d
    copy "%sourceFile%" "%destinationFile%"
    )

IF %F%==1 IF %C%==0 (
    ::moving the file c to d
    move "%sourceFile%" "%destinationFile%"
    )

IF %F%==0 IF %C%==1 (
    ::copying a directory c from d, /s:  boş olanlar hariç, /e:boş olanlar dahil
    xcopy "%sourceCopyDirectory%" "%destinationCopyDirectory%" /s/e
    )

IF %F%==0 IF %C%==0 (
    ::moving a directory
    xcopy /E "%sourceMoveDirectory%" "%destinationMoveDirectory%"
    rd /s /q "%sourceMoveDirectory%"
    )

很棒的批处理文件引用:http://ss64.com/nt/if.html

票数 122
EN

Stack Overflow用户

发布于 2013-04-27 04:47:31

我认为在这个问题和一些答案中,对DOS中这个伪代码的含义有一点混淆: IF A IF B X ELSE Y。它不是指IF (A和B)则X ELSE Y,但实际上是指IF A( IF B THEN X ELSE Y)。如果A的测试失败,那么整个内部的if-else将被忽略。

正如提到的答案之一,在这种情况下,只有一个测试可以成功,所以不需要'else‘,但当然这只在这个例子中有效,它不是执行if-else的通用解决方案。

有很多方法可以解决这个问题。这里有一些想法,所有的都很丑陋,但是嘿,这是(至少曾经是) DOS!

代码语言:javascript
复制
@echo off

set one=1
set two=2

REM Example 1

IF %one%_%two%==1_1 (
   echo Example 1 fails
) ELSE IF %one%_%two%==1_2 (
   echo Example 1 works correctly
) ELSE (
    echo Example 1 fails
)

REM Example 2

set test1result=0
set test2result=0

if %one%==1 if %two%==1 set test1result=1
if %one%==1 if %two%==2 set test2result=1

IF %test1result%==1 (
   echo Example 2 fails
) ELSE IF %test2result%==1 (
   echo Example 2 works correctly
) ELSE (
    echo Example 2 fails
)

REM Example 3

if %one%==1 if %two%==1 (
   echo Example 3 fails
   goto :endoftests
)
if %one%==1 if %two%==2 (
   echo Example 3 works correctly
   goto :endoftests
)
echo Example 3 fails
)
:endoftests
票数 59
EN

Stack Overflow用户

发布于 2012-06-18 19:29:57

你不能像在其他语言中那样批处理if else,它必须是嵌套的if

使用嵌套的if,您的批处理将如下所示

代码语言:javascript
复制
IF %F%==1 IF %C%==1(
    ::copying the file c to d
    copy "%sourceFile%" "%destinationFile%"
    ) ELSE (
        IF %F%==1 IF %C%==0(
        ::moving the file c to d
        move "%sourceFile%" "%destinationFile%"
        ) ELSE (
            IF %F%==0 IF %C%==1(
            ::copying a directory c from d, /s:  boş olanlar hariç, /e:boş olanlar dahil
            xcopy "%sourceCopyDirectory%" "%destinationCopyDirectory%" /s/e
            ) ELSE (
                IF %F%==0 IF %C%==0(
                ::moving a directory
                xcopy /E "%sourceMoveDirectory%" "%destinationMoveDirectory%"
                rd /s /q "%sourceMoveDirectory%"
                )
            )
        )
    )

或者像詹姆斯建议的那样,将你的if链接起来,但是我认为正确的语法是

代码语言:javascript
复制
IF %F%==1 IF %C%==1(
    ::copying the file c to d
    copy "%sourceFile%" "%destinationFile%"
    )
票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11081735

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档