sel*_*tas 129 if-statement batch-file
我有一个关于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%"
)
Run Code Online (Sandbox Code Playgroud)
Jam*_*ill 105
你的语法不正确.你不能使用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%"
)
Run Code Online (Sandbox Code Playgroud)
伟大的批处理文件参考:http://ss64.com/nt/if.html
小智 53
我认为在这个问题和一些答案中,有一些关于DOS中伪代码含义的混淆:IF A IF BX ELSE Y.它并不意味着IF(A和B)那么X是Y,但是事实意味着IF A(如果B那么X Y 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
Run Code Online (Sandbox Code Playgroud)
Bal*_*i C 12
AFAIK你不能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%"
)
)
)
)
Run Code Online (Sandbox Code Playgroud)
或者正如詹姆斯建议的那样,链接你if的,但我认为正确的语法是
IF %F%==1 IF %C%==1(
::copying the file c to d
copy "%sourceFile%" "%destinationFile%"
)
Run Code Online (Sandbox Code Playgroud)
这是我处理 if else if 情况的方法
if %env%==dev (
echo "dev env selected selected"
) else (
if %env%==prod (
echo "prod env selected"
)
)
Run Code Online (Sandbox Code Playgroud)
请注意,它与其他编程语言(如 C++ 或 Java)的 if-elseif 块不同,但它会执行您需要执行的操作