Пакетный файл преобразует MPG в AVI и работает по расписанию. Несмотря на то, что пакет работает нормально из расписания, запланированное задание возвращает сообщение 0xff. Запуск вручную, он отображает код выхода 0. Я попытался вставить 'end' - который возвращает 0x0, но он конвертирует только первый файл и игнорирует остальные.

del /q /s staxrip_temp\* 
cd staxrip_temp
for /f "delims=" %%d in ('dir /s /b /ad ^| sort /r') do rd "%%d"
cd..
for %%f in (*.mpg) do echo %%f
for %%a in ("*.mpg") do call :go_now  "%%a"
 if %%a not==("*.mpg") goto eof
:go_now
echo processing %~n1.mpg
staxrip.exe -template:_myxvid "%~dpn1.mpg" -encode -exit
del /q "%~dpn1.mpg"
rem echo %ERRORLEVEL%
rem end

Решено: заменено, если %% a not ==("*. Mpg"), перейти на: если не существует %% a %% exit

1 ответ1

1

Попробуйте добавить exit 0 в качестве последнего оператора в командном файле.

Quits the CMD.EXE program (command interpreter) or the current batch
script.

EXIT [/B] [exitCode]

  /B          specifies to exit the current batch script instead of
              CMD.EXE.  If executed from outside a batch script, it
              will quit CMD.EXE

  exitCode    specifies a numeric number.  if /B is specified, sets
              ERRORLEVEL that number.  If quitting CMD.EXE, sets the process
              exit code with that number.

Хм ... Я не уверен в точной семантике команды call {:label} или в том, как она "возвращается" - если ваша подпрограмма :go_now возвращается нормально (т. Е. Обрабатывает более одного файла), когда вы не ставите end или exit туда, не делай этого.

Наверное, нужно изменить это

if %%a not==("*.mpg") goto eof

в

if %%a not==("*.mpg") exit 0

но держу пари, что причина возврата 0xFF том, что goto eof - это синтаксическая ошибка, вы хотели написать goto :EOF .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .