2017-01-06 6 views
1

У меня есть командный файл, предназначенный для проверки размера файла, но в результате появляется сообщение об ошибке «3072 неожиданно в это время». Вот код:Пакетный скрипт для проверки размера файла - Сообщение об ошибке

rem @echo off 
setlocal EnableDelayedExpansion 
set minbytesize=3072 

if %~z1 LSS %minbytesize% 
    echo.failed 
ELSE 
    echo.passed 

Пакетный файл выполняется из другой части программного обеспечения с Windows «вызов» команды и передает имя файла в этой партии в качестве параметра% 1. Добавление параметра ~ z в параметр & 1 разрешает размер файла.

Я экспериментировал с различными комбинациями»,%, и! В„если“линия, но ничего не было успешным еще. Любые идеи о том, что еще может быть не хватает?

+1

@KraangPrime - Это совершенно бесполезно совет, и не имеет ничего общего с ошибкой. ENDLOCAL не требуется. – dbenham

ответ

4

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

Предполагая, что вы передаете в допустимый параметр файла, то вы получите сообщение об ошибке:. синтаксис команды неверен это потому, что ваш IF синтаксис неверно. Если вы хотите, чтобы команда IF охватывала несколько строк, вы должны использовать круглые скобки (или продолжение строки, но это менее часто используется).

@echo off 
setlocal EnableDelayedExpansion 
set minbytesize=3072 

if %~z1 LSS %minbytesize% (
    echo.failed 
) else (
    echo.passed 
) 

Но у вас все еще есть проблемы, если вы забудете предоставить аргумент файла или файл не существует. В этом случае %~1 расширяется в пустую строку, так что команда становится:

if LSS 3072 (

который является недействительным синтаксис, который генерирует: 3072 был неожиданным в это время. Это сообщение об ошибке получено, потому что LSS интерпретируется как левая часть сравнения, после чего синтаксический анализатор ожидает оператора сравнения, но вместо этого видит 3072.

Возможно, самый простой способ сделать решить эту проблему, чтобы сохранить значение %~1 в переменной, а затем, если переменная не определена, установите значение 0.

@echo off 
setlocal EnableDelayedExpansion 
set minbytesize=3072 
set size=%~z1 
if not defined size set size=0 

if %size% LSS %minbytesize% (
    echo.failed 
) else (
    echo.passed 
) 
+0

Я знал, что это должно быть что-то простое, но смотрел на него так долго, что я просто рисовал пробелы. Спасибо, что указал мне в правильном направлении. @dbenham ваш совет был именно тем, что мне нужно. Сейчас все отлично. – RD5446