我有一个关于批处理文件中if - else结构的问题。每个命令都是单独运行的,但是我不能安全地使用"if - else“块,所以我的程序的这些部分不能工作。我怎样才能让这些部件运行起来呢?谢谢。
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%"
)
发布于 2012-06-18 19:29:11
您的语法不正确。您不能使用ELSE IF
。看起来你并不是真的需要它。只需使用多条IF
语句:
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
发布于 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!
@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
发布于 2012-06-18 19:29:57
你不能像在其他语言中那样批处理if else
,它必须是嵌套的if
。
使用嵌套的if
,您的批处理将如下所示
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
链接起来,但是我认为正确的语法是
IF %F%==1 IF %C%==1(
::copying the file c to d
copy "%sourceFile%" "%destinationFile%"
)
https://stackoverflow.com/questions/11081735
复制相似问题