0

如果我的文件大小小于特定大小(在这种情况下,如果它等于零),我正在尝试将我的批处理文件设置为出错

我使用了与脚本的大部分内容相同的格式,但它失败了

:: Check size of input files 
call "%DIR_BAT%\CreateLAFMessage.bat" "%~n0.bat-> %STEP_NBR% - check for size of LOM_AA_2.dat and LOM_AI.dat" %_LAF_MSG_DETAILS%
set ERROR_MSG="%DIR_IP_INTERFACES%\LOM_AA_2.dat" ZERO Byte File
set file="%DIR_IP_INTERFACES%\LOM_AA_2.dat"
set minbytesize=0
FOR /F "usebackq" %%A IN (%file%) DO set size=%%~zA
if %size% LSS %minbytesize% (
    echo.File is ^> %minbytesize% bytes
) ELSE (
    goto ON_ERROR
)
set ERROR_MSG="%DIR_IP_INTERFACES%\LOM_AI.dat" ZERO Byte File
set file="%DIR_IP_INTERFACES%\LOM_AI.dat"
FOR /F "usebackq" %%A IN (%file%) DO set size=%%~zA
if %size% LSS %minbytesize% (
    echo.File is ^> %minbytesize% bytes
) ELSE (
    goto ON_ERROR
)
4

2 回答 2

2

根据我的评论,文件不能小于0 bytes因此 usingif.. LSS..将永远不会匹配 below 0。而是使用EQU大于0数字的,LEQ

就是说,为什么要为相同的函数使用 2 个 for 循环,但使用不同的文件?我们可以运行一个循环并消除Else我们也不需要for /f但一个简单的for循环。

@echo off
set "DIR_IP_INTERFACES=D:\SomeDIR"
set "files=%DIR_IP_INTERFACES%\LOM_AA_2.dat %DIR_IP_INTERFACES%\LOM_AI.dat"
set "minbytesize=0"
setlocal enabledelayedexpansion
FOR %%A IN (%files%) DO (
   set "file=%%A"
   set "size=%%~zA"
   if !size! GTR !minbytesize! call :ON_ERROR
   if !size! EQU !minbytesize! echo %%A ^= !size! bytes
)
goto :EOF
:ON_ERROR
rem do your other stuff here when on_error label is called...
echo %file% is not 0 it is !size!
于 2018-05-03T13:55:17.713 回答
1

它以何种方式“失败”?

也许是因为你正在执行

if %size% LSS %minbytesize%

如果文件的大小小于minbytesize(然后您报告“大于”) ,则这是正确的

为什么要使用for /fwhich 读取文件的set 每一行并为文件的每一行执行?

如果您所做的只是查找文件的大小,那么纯文本for会快得多。

于 2018-05-03T13:13:22.003 回答