我需要检测文件是否为空。如果文件为空则做一些事情;否则,做点别的事。
为了达到这个目标,我在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....
答案 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
)
)