Размер файла меньше, чем ошибка - PullRequest
0 голосов
/ 03 мая 2018

Я пытаюсь настроить пакетный файл на ошибку, если размер моего файла меньше определенного размера (в данном случае, если он равен нулю)

Я использовал тот же формат, что и для большей части скрипта, но он не работает

:: 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
)

Ответы [ 2 ]

0 голосов
/ 03 мая 2018

Согласно моему Комментарию, файл не может быть меньше 0 bytes, поэтому использование if.. LSS.. никогда не будет соответствовать ниже 0. Вместо этого используйте EQU из более чем 0 номеров, LEQ

Тем не менее, почему вы используете 2 для циклов для одной и той же функции, но разных файлов? Мы можем запустить один цикл и исключить 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!
0 голосов
/ 03 мая 2018

Каким образом это «провал»

Возможно, потому что вы выполняете

if %size% LSS %minbytesize%

, который имеет значение true, если размер файла МЕНЬШЕ, чем minbytesize (в этом случае вы сообщаете "больше чем")

Почему вы используете for /f, который читает каждую строку файла и выполняет set для каждой строки файла ??

Если все, что вы делаете, это находите размер файла, простой for будет намного быстрее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...