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.

È stato utile?

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".

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top