Как пакетный файл Windows обнаруживает, что файл имеет размер> 0 байт? - PullRequest
2 голосов
/ 15 июня 2010

У меня есть пакетный файл Windows, используемый в моей цепочке инструментов Visual Studio, который создает список файлов в определенном каталоге, а затем использует «findstr», чтобы сузить этот список до тех файлов, имена которых содержат определенную строку;и затем выполняет некоторую работу с этими файлами.

dir /b \mypath\*.wav >wavRawList.txt

findstr /b /v "DesiredString" wavRawList.txt >wavListWithDesiredString.txt

for /f %%a in (wavListWithDesiredString.txt) do (

  [... do some stuff ...]

)

Visual Studio часто сообщает об ошибках из этого пакетного файла, и я думаю, что это потому, что wavListWithDesiredString.txt часто оказывается файлом с длиной 0. Есть лиРазнообразие «если существует wavListWithDesiredString.txt», где вместо «существовать» я могу заменить команду, означающую «если она существует и ее длина файла больше 0»?

Ответы [ 3 ]

5 голосов
/ 15 июня 2010

Более или менее встроенный способ, используя for:

for %%x in (wavListWithDesiredString.txt) do if not %%~zx==0 (
    ...
)

или вы можете использовать подпрограмму:

:size
set SIZE=%~z1
goto :eof

который вы можете назвать так:

call :size wavListWithDesiredString.txt
if not %SIZE%==0 ...
0 голосов
/ 07 октября 2015
IF EXIST %1 IF %~z1 GTR 0 ECHO Both conditions are satisfied.

Не работает, потому что, если файл не существует, эта часть: «IF% ~ z1 GTR 0» преобразуется в «IF GTR 0», что является недопустимой командой и приводит к:

0 was unexpected at this time.

Задержка расширения тоже не помогает.Чтобы исправить это используйте:

if exist %1 (
    echo "Ouput file exists, checking size"
    for %%x in (%1) do if not %%~zx==0 (
        echo "File exists, size is non zero"
        ... DO SOMETHING ...
    ) else (
        echo "Size is zero"
    )
) else (
    echo "There is no file"
)
0 голосов
/ 20 сентября 2012

Мне удалось решить часть вопроса о размере файла с помощью другого вопроса о переполнении стека, найденного здесь .Я бы использовал вложение для имитации оператора AND, как в примере ниже:

IF EXIST %1 IF %~z1 GTR 0 ECHO Both conditions are satisfied.

% 1 - это параметр, который необходимо передать в пакетный файл.

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