Пакетный файл - ErrorLevel команды REN возвращает 0 даже при ошибке - PullRequest
0 голосов
/ 07 апреля 2010

Это связано с моим предыдущим вопросом.

ren "C:\Temp\%%A" "%%A"
if errorlevel 0 (
          "C:\Program Files\7-Zip\cmdline\7za.exe" a -tzip -mx9 "C:\temp\Zip\%%A.zip" "C:\temp\%%A"
           Move "C:\temp\%%A" "C:\Temp\Archive"
                )

В приведенном выше примере IF всегда принимает значение true, даже если команда REN не выполнена.

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

Как лучше всего это сделать?

Спасибо.

Ответы [ 3 ]

5 голосов
/ 08 апреля 2010

Введите help if в командной строке, чтобы получить некоторую информацию об обработке уровня ошибки.

Проблема с вашим кодом состоит в том, что выражение IF ERRORLEVEL N оценивается как истинное для любого числа, равного или превышающего N

Обычно только ERRORLEVEL 0 указывает на успех, любое другое (большее) значение является признаком некоторой ошибки. Чтобы просто проверить, не произошла ли ошибка, отмените проверку на:

IF NOT ERRORLEVEL 1 (
   REM your code here
)

или в качестве альтернативы закройте скрипт:

IF ERRORLEVEL 1 EXIT /B
0 голосов
/ 07 августа 2011

REN является внутренней командой и не устанавливает ERRORLEVEL (я ищу тот же ответ здесь )

0 голосов
/ 29 апреля 2011

вы также можете сделать rem.bat, который будет делать уровень ошибок, вызывая что-то вроде этого, ЕСЛИ ERRORLEVEL == 300 вызывать rem.bat, или вы можете просто сделать каждый уровень ошибки разблокированным, используя уровень 0. Вы можете изменить что не только сделает приложение более плавным, но и не даст запаздывания тому, как скорость вентилятора останется прежней, так как уровень ошибок будет использовать больше ресурсов процессора.

...