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

Batch file 如何跳过行/如果我有多条if语句,如何执行一条if语句并跳过其余的if语句,batch-file,Batch File,我需要检测文件是否为空。如果文件是空的,做些什么;否则,做点别的 为了达到这个目标,我在for循环中使用if语句。顺便说一句,我是如何创建脚本的,它只在文件不为空时工作 问题:如果test.txt文件中没有数据,批处理文件将同时读取:fault和:true。我试图通过“skip=5”跳过真实条件,但失败了。我想我把跳过语句写错了 我想要的是:如果test.txt有数据,将执行:true;如果test.txt不包含任何数据,将执行:fault。Echo语句将在:fault condition或:t

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

为了达到这个目标,我在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....

skip=..
是/F的一个
选项,如果
(请记住代码中缺少括号),它将与
无关。并且
GOTO
会中断
上下文,因此它将仅在第一个文件上执行。您可以在每个部分的末尾使用另一个
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
    )
)

谢谢你的详细解释。当我研究for&if语句时,有些人说我们不能使用else语句。您能告诉我们什么时候不能使用else语句吗?我尝试了if-else语句,但系统没有读取for-do中的任何内容。你知道原因是什么吗?只有在我写了if语句之后,系统才会读取if语句。你能告诉我原因吗?空格或换行符会分批破坏我的脚本吗?@baciyan
else
会花费你一点代码。当然,你可以使用两个if语句。你可以在每个if/else部分中放置
回显一些测试消息来检查它是否到达。