如果我的文件大小小于特定大小(在这种情况下,如果它等于零),我试图将我的批处理文件设置为错误输出
我使用了与脚本的大部分相同的格式,但它失败了
:: 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
)
答案 0 :(得分:2)
根据我的评论,文件不能低于0 bytes
,因此使用if.. LSS..
时,0
下方不会匹配EQU
。相反,使用0
来获得高于LEQ
的数字,Else
那就是说,为什么你使用2 for循环来实现相同的功能,但不同的文件呢?我们可以运行单个循环并消除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!
循环。
Promise.all()
答案 1 :(得分:1)
它以什么方式失败?"
也许是因为你正在执行
end of line
如果文件的大小不是if %size% LSS %minbytesize%
,那么这是正确的(然后您报告"大于")
为什么使用minbytesize
读取文件的每一行并为文件的每一行执行for /f
?
如果你所做的只是找到文件的大小,那么普通的set
会快得多。