如果我有多个if语句,如何跳过行/如何执行一个if语句并跳过其余的if语句

时间:2014-12-22 21:33:25

标签: batch-file

我需要检测文件是否为空。如果文件为空则做一些事情;否则,做点别的事。

为了达到这个目标,我在for循环中使用if语句。顺便说一下我创建脚本的方式,它只在文件不为空时才有效

问题:如果test.txt文件中没有数据,批处理文件将同时读取:fault和:true。我试图通过“skip = 5”跳过真实情况,但我失败了。我想我错误地写了跳过声明。

我想要的:如果test.txt有数据,则执行:true;如果test.txt不包含任何数据,则:将执行fault。 Echo语句将在以下之后执行:fault condition或:true condition。

for %%f in (test*.txt) do 
    if %%~zf EQU 0 goto fault
    if %%~zf NEQ 0 goto true

:fault
Copy C:\Main\Test\final*.txt C:\Main\Test\final\* /y
REM Goto skip =5   

:true
Copy C:\Main\Test\final*.txt C:\Main\Test\final\* /y
Copy C:\Main\Test\semfinal*.txt C:\Main\Test\semfinal\* /y

echo....
echo....

1 个答案:

答案 0 :(得分:1)

skip=..是一个FOR /F选项,不会对IF执行任何操作(请注意代码中缺少括号)。GOTO符号for 1}} context所以它只会在第一个文件上执行。您可以在每个部分的末尾使用另一个GOTO - 以防您只想处理一个文件。

for %%f in (test*.txt) do (
    if %%~zf EQU 0 goto fault
    if %%~zf NEQ 0 goto true
)
:fault
Copy C:\Main\Test\final*.txt C:\Main\Test\final\* /y

goto :end_if

:true
Copy C:\Main\Test\final*.txt C:\Main\Test\final\* /y
Copy C:\Main\Test\semfinal*.txt C:\Main\Test\semfinal\* /y

goto :end_if


:end_if
echo....
echo....

或者您可以将表达式放在括号中,因为GOTO会降低性能,您将处理应用于蒙版的所有文件。

for %%f in (test*.txt) do (
    if %%~zf EQU 0 (
        Copy C:\Main\Test\final*.txt C:\Main\Test\final\* /y
    ) else (
        Copy C:\Main\Test\final*.txt C:\Main\Test\final\* /y
        Copy C:\Main\Test\semfinal*.txt C:\Main\Test\semfinal\* /y
    )
)