domanda errorlevel batch file di Windows
-
19-09-2019 - |
Domanda
Ho un file batch che analizza una serie di nomi di file da un file di testo e li concatena in un unico forte - è stato discusso in precedenza qui . Tuttavia, non voglio la stringa contiene un file se il file genera un errore quando l'eseguo attraverso alcuni comandi (come un controllo di VCS, per esempio). Ecco il mio tentativo:
set FILE_LIST=
for /f %%x in (temp.txt) do (
:: perform a VCS test
accurev diff -b %%x
:: skip concatenation if error level is > 2
IF errorlevel 2 GOTO NEXT
:: perform the concatenation
set FILE_LIST=!FILE_LIST! %%x
:NEXT
:: print a message if here due to an error above
IF errorlevel 2 echo VCS problem with this file: %%x
)
Il problema è - lo script sembra fermare l'esecuzione dell'intero ciclo for non appena ne trova uno più grande di errorlevel 2. Se ci sono cinque file nella lista e la terza ha un problema di VCS - solo gestisce lo script i primi due.
Soluzione
setlocal ENABLEDELAYEDEXPANSION
set FILE_LIST=
for /f %%x in (temp.txt) do (
accurev diff -b "%%~x"
IF errorlevel 2 (
echo VCS problem with this file: %%~x
) ELSE (
set FILE_LIST=!FILE_LIST! %%x
)
)
Altri suggerimenti
Se la costruzione ERRORLEVEL ha uno strana caratteristica ... restituisce TRUE se la codice di ritorno è pari o superiore rispetto al errorlevel specificato.
questo link per capire come affrontare quella "caratteristica".