Windows Batch: leia a linha que gerou errorlevel

0

Existe uma maneira de ler a linha de código que elevou o nível de erro de dentro de um arquivo de lote após sua execução? (Receio que não haja).

Por exemplo, o comando net use H: \MyComputer\sharename02 resultaria em System error 85 has occurred. The local device name is already in use. Neste caso, a unidade H: não está disponível e o errorlevel não é mais 0. Meu objetivo é buscar esse comando para modificá-lo, um pouco assim:

@echo off
set _counter=0

net use F: \MyComputer\sharename01 /persistent:No 
IF %ERRORLEVEL% NEQ 0 goto manip
_counter=_counter+1

:next2
net use H: \MyComputer\sharename02 /persistent:No
IF %ERRORLEVEL% NEQ 0 goto manip
_counter=_counter+1

:next3
net use I: \MyComputer\sharename03 /persistent:No
IF %ERRORLEVEL% NEQ 0 goto manip
_counter=_counter+1

IF %ERRORLEVEL% EQU 0 goto end

:manip
(do something with...
_variable="\MyComputer\sharenameXY"
...)
_counter=_counter+1
if _counter==3 (goto end)
else (goto next%_counter%)

:end

A seção :manip funcionaria com o comando net use H: \MyComputer\sharename02 armazenado em _variable .

Estou ciente de que esse tipo de problema não é realmente adequado para o processamento em lote e provavelmente seria mais fácil resolvê-lo usando VBScript em vez de lote.

Espero que haja uma solução, caso contrário eu precisaria reescrever tudo o que já tenho em VBscript ou Powershell.

    
por snahl 03.11.2015 / 12:44

1 resposta

1

Não, não há. No entanto, você pode usar vários tipos de loops:

call :map_share Z Y X W V U T S R Q P O N M L K J I H G F E D C B A
echo I got %letter%!
goto :eof

:map_share
if "%~1"=="" goto :eof
net use %1: \MyComputer\sharename02 /persistent:No || (
    shift
    goto :map_share
)
set letter=%1
goto :eof
    
por 03.11.2015 / 13:16