A tarefa agendada retorna 0xFF, mas funciona ok

0

O arquivo em lote converte mpg em avi e é executado em uma programação. Embora o lote funcione bem no agendamento, a tarefa agendada retorna a mensagem 0xff. Rodando manualmente, exibe um código de saída de 0. Eu tentei inserir 'end' - o que dá um retorno de 0x0, mas só converte o primeiro arquivo e ignora o resto.

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

Resolvido:  Substituído se %% um não == ("*. Mpg") goto eof com: se não existir %% a %% exit

    
por SamAstin 07.08.2013 / 14:15

1 resposta

1

Tente adicionar um exit 0 como a última instrução no arquivo em lote.

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.

Hmm ... não tenho certeza da semântica exata do comando call {:label} ou como "retorna" - se a subrotina :go_now está retornando normalmente (ou seja, processando mais de um arquivo) quando você não usa coloque um end ou exit lá, então não faça isso.

Provavelmente precisa mudar isso

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

para

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

mas aposto a razão pela qual ele está retornando 0xFF é porque goto eof é um erro de sintaxe, você queria escrever goto :EOF .

    
por 08.08.2013 / 17:55