Windows BAT:测试特定文件是否为空

9
我想检查一个特定的文件是否为空,在Windows .bat文件中。这是我的未能正常工作的脚本:
set dir="C:\test"
set file="%dir%\fff.txt"

cd %dir%
if %file%%~zi == 0 exit
ftp -s:"%dir%\ftp.action"
exit

你能帮我调试一下吗?

4个回答

8

或者尝试以下方法:

@echo off
set "dir=C:\temp"
set "file=%dir%\a.txt"

call :CheckEmpty "%file%"
goto :eof

:CheckEmpty
if %~z1 == 0 exit
ftp -s:"%dir%\ftp.action"
goto :eof

主要区别在于我使用函数调用并使用%~z1,因为修改器仅适用于参数如%1、%2..%9或for循环参数如%%a...。

谢谢,可以了!我只需要在“set”命令中删除双引号,但这很完美。 - Réjôme
双引号对于带有空格或特殊字符的路径/文件名是必需的。 - jeb
1
好的,空格对于“set”命令不会造成麻烦。在所有合法文件名字符中,我认为只有“&”和“^”可能会引起问题。 - Joey
@Joey:当然,你是正确的,但是用引号也可以避免在行末出现看不见的空格问题,有了引号这些空格就会被忽略。 - jeb

5
使用文件对比的批处理解决方案:
type nul > blank
fc myfile blank > nul
if errorlevel 1 echo myfile is not empty

问题是特定文件是否为空。 - Kumāra Bhikkhu

0
for /F %%A in ("myfile") do If %%~zA equ 0 echo myfile is empty

-1

试试这个:

    Const ForReading = 1

    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objFile = objFSO.OpenTextFile("c:\boot.ini", ForReading)


    Dim arrFileLines()
    i = 0
    Do Until objFile.AtEndOfStream
      Redim Preserve arrFileLines(i)
      arrFileLines(i) = objFile.ReadLine
      i = i + 1
    Loop
    objFile.Close

这是什么语言? 这似乎不是简单的Windows命令行(.bat)... - Réjôme
不好意思,我犯了错误。这是VBScript脚本,你可以创建一个.vbs文件并将其粘贴进去。 - Mark Mooibroek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接