fomermay
Goto Top

Errorlevel zurücksetzten

Hi,

ich habe eine Batchdatei die Dateien verschiebt, bei einem Fehler soll eine Meldung ausgegeben werden und danach die nächste Datei verschoben werden. Ab der ersten Datei bei der Fehler auftritt wird bei allen anderen Dateien auch die Meldung ausgegeben, was natürlich daran liegt das der Errorlevel dann immer größer 0 ist. Die Frage kann ich den Errorlevel einfach mit

SET errorlevel = 0

wieder auf null zurücksetzten oder gibt es "elegantere" Methoden?

Content-Key: 181246

Url: https://administrator.de/contentid/181246

Printed on: April 25, 2024 at 07:04 o'clock

Member: bastla
bastla Feb 29, 2012 at 15:19:12 (UTC)
Goto Top
Hallo FomerMay!

"Elegant" fände ich es, den fraglichen Code zu posten ... face-wink

Grüße
bastla
Member: FomerMay
FomerMay Feb 29, 2012 at 15:28:56 (UTC)
Goto Top
Wenns weiterhilft:

setlocal enabledelayedexpansion
FOR %%i IN (%quelle%\*.DLL) DO (
	SET pgmname=%%~ni
	ECHO.*******************************************************************************
	ECHO.* Verschieben des Programms %%~ni                                             *
	ECHO.*******************************************************************************
	MOVE %quelle%\%%~ni.DLL %ziel%
	IF ERRORLEVEL 1 (
		CALL :errCoDLL 
	) ELSE (
		ECHO.%%~ni.DLL wurde verschoben...
		ECHO.%DATE% %TIME:~0,8% - %%~ni.DLL uebernommen >> X:\copy_dll_log.log
	)
	)
IF "!openDir!"=="J" CALL :OpenDir   
endlocal
[...]
setlocal enabledelayedexpansion
FOR %%i IN (%quelle2%\*.DLL) DO (
	SET pgmname=%%~ni
	ECHO.*******************************************************************************
	ECHO.* Verschieben des Programms %%~ni                                             *
	ECHO.*******************************************************************************
	MOVE %quelle2%\%%~ni.DLL %ziel2%
	IF ERRORLEVEL 1 (
		CALL :errCoDLL 
	) ELSE (
		ECHO.%%~ni.DLL wurde verschoben...
		ECHO.%DATE% %TIME:~0,8% - %%~ni.DLL uebernommen >> X:\copy_dll_log.log
	)
	)
IF "!openDir!"=="J" CALL :OpenDir   
endlocal
GOTO :ende

REM ***************************************************************************************
REM * Fehlerbehandlung                                                                    *
REM ***************************************************************************************

:errCoDLL
ECHO.Fehler beim verschieben der DLL, sie muessen die DLL fuer das Programm %pgmname% von Hand verschieben
ECHO.%DATE% %TIME:~0,8% - %pgmname% - Fehler beim verschieben (DLL) >> X:\copy_dll_log.log
SET openDir=J
GOTO :EOF

REM ***************************************************************************************
REM * Unterroutinen                                                                       *
REM ***************************************************************************************

:OpenDir
%SystemRoot%\explorer.exe /e,%pfad%\
SET openDir=N
GOTO :EOF

[...]

:ende
PAUSE
EXIT /b 0

hab mal alles unwichtige rausgeschnitten.

Ich würde jetzt bei der Sprungmarke :errCoDLL vor dem GOTO den Errorlevel wieder auf 0 setzten.
Member: bastla
bastla Feb 29, 2012 at 15:38:33 (UTC)
Goto Top
Hallo FomerMay!

Ich würde es (ungetestet) für die Zeilen 7 - 13 so versuchen:
    MOVE %quelle%\%%~ni.DLL %ziel% && (
        ECHO.%%~ni.DLL wurde verschoben...
        ECHO.%DATE% %TIME:~0,8% - %%~ni.DLL uebernommen >> X:\copy_dll_log.log
    ) || (
        CALL :errCoDLL 
    )
BTW: "%DATE% %TIME:~0,8%" in der Schleife wird für alle Dateien den gleichen Timestamp liefern - Grund: keine "delayedexpansion", und für "%quelle%\%%~ni.DLL" sollte doch "%%i" genügen ...

Grüße
bastla
Mitglied: 60730
60730 Feb 29, 2012 at 15:38:54 (UTC)
Goto Top
moin,

ich schneid auch mal alles unwichtige raus...

24. MOVE %quelle2%\%%~ni.DLL %ziel2%
25. IF ERRORLEVEL 1 (

  • Würde ich doch so herum umgestalten...
24. MOVE %quelle2%\%%~ni.DLL %ziel2%
25. IF not exist %ziel2%\ %%~ni.DLL echo %%~ni.DLL konnte nicht nach %ziel2% verschoben werden>>error.log

und irgendwo am ende
if exist error.log echo mach mir den Hengst

Gruß
Member: FomerMay
FomerMay Feb 29, 2012 at 15:46:17 (UTC)
Goto Top
Kannst du kurz erklären auf welcher Grundlage er hier
MOVE %quelle% %ziel% && (
     ECHO
     ECHO
) | | (
     CALL
)
erkennt ob ein Fehler vorliegt oder nicht? Gerne auch ein Stichwort nachdem ich googlen und selbst nachlesen kann.
Member: bastla
bastla Feb 29, 2012 at 15:52:15 (UTC)
Goto Top
Hallo FomerMay!

http://www.microsoft.com/resources/documentation/windows/xp/all/proddoc ... oder auch
hh ms-its:%windir%\Help\ntcmds.chm::/ntcmds_shelloverview.htm
Grüße
bastla
Member: mathe172
mathe172 Feb 29, 2012 at 15:57:01 (UTC)
Goto Top
Hallo,

der Code von Bastla macht folgendes:

MfG,
Mathe172