Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Errorlevel zurücksetzten

Frage Entwicklung Batch & Shell

Mitglied: FomerMay

FomerMay (Level 1) - Jetzt verbinden

29.02.2012, aktualisiert 16:17 Uhr, 1893 Aufrufe, 7 Kommentare

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

01.
SET errorlevel = 0
wieder auf null zurücksetzten oder gibt es "elegantere" Methoden?
Mitglied: bastla
29.02.2012 um 16:19 Uhr
Hallo FomerMay!

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

Grüße
bastla
Bitte warten ..
Mitglied: FomerMay
29.02.2012 um 16:28 Uhr
Wenns weiterhilft:

01.
setlocal enabledelayedexpansion 
02.
FOR %%i IN (%quelle%\*.DLL) DO ( 
03.
	SET pgmname=%%~ni 
04.
	ECHO.******************************************************************************* 
05.
	ECHO.* Verschieben des Programms %%~ni                                             * 
06.
	ECHO.******************************************************************************* 
07.
	MOVE %quelle%\%%~ni.DLL %ziel% 
08.
	IF ERRORLEVEL 1 ( 
09.
		CALL :errCoDLL  
10.
	) ELSE ( 
11.
		ECHO.%%~ni.DLL wurde verschoben... 
12.
		ECHO.%DATE% %TIME:~0,8% - %%~ni.DLL uebernommen >> X:\copy_dll_log.log 
13.
14.
15.
IF "!openDir!"=="J" CALL :OpenDir  
16.
endlocal 
17.
[...] 
18.
setlocal enabledelayedexpansion 
19.
FOR %%i IN (%quelle2%\*.DLL) DO ( 
20.
	SET pgmname=%%~ni 
21.
	ECHO.******************************************************************************* 
22.
	ECHO.* Verschieben des Programms %%~ni                                             * 
23.
	ECHO.******************************************************************************* 
24.
	MOVE %quelle2%\%%~ni.DLL %ziel2% 
25.
	IF ERRORLEVEL 1 ( 
26.
		CALL :errCoDLL  
27.
	) ELSE ( 
28.
		ECHO.%%~ni.DLL wurde verschoben... 
29.
		ECHO.%DATE% %TIME:~0,8% - %%~ni.DLL uebernommen >> X:\copy_dll_log.log 
30.
31.
32.
IF "!openDir!"=="J" CALL :OpenDir  
33.
endlocal 
34.
GOTO :ende 
35.
 
36.
REM *************************************************************************************** 
37.
REM * Fehlerbehandlung                                                                    * 
38.
REM *************************************************************************************** 
39.
 
40.
:errCoDLL 
41.
ECHO.Fehler beim verschieben der DLL, sie muessen die DLL fuer das Programm %pgmname% von Hand verschieben 
42.
ECHO.%DATE% %TIME:~0,8% - %pgmname% - Fehler beim verschieben (DLL) >> X:\copy_dll_log.log 
43.
SET openDir=J 
44.
GOTO :EOF 
45.
 
46.
REM *************************************************************************************** 
47.
REM * Unterroutinen                                                                       * 
48.
REM *************************************************************************************** 
49.
 
50.
:OpenDir 
51.
%SystemRoot%\explorer.exe /e,%pfad%\ 
52.
SET openDir=N 
53.
GOTO :EOF 
54.
 
55.
[...] 
56.
 
57.
:ende 
58.
PAUSE 
59.
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.
Bitte warten ..
Mitglied: bastla
29.02.2012 um 16:38 Uhr
Hallo FomerMay!

Ich würde es (ungetestet) für die Zeilen 7 - 13 so versuchen:
01.
    MOVE %quelle%\%%~ni.DLL %ziel% && ( 
02.
        ECHO.%%~ni.DLL wurde verschoben... 
03.
        ECHO.%DATE% %TIME:~0,8% - %%~ni.DLL uebernommen >> X:\copy_dll_log.log 
04.
    ) || ( 
05.
        CALL :errCoDLL  
06.
    )
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
Bitte warten ..
Mitglied: 60730
29.02.2012 um 16:38 Uhr
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ß
Bitte warten ..
Mitglied: FomerMay
29.02.2012 um 16:46 Uhr
Kannst du kurz erklären auf welcher Grundlage er hier
01.
MOVE %quelle% %ziel% && ( 
02.
     ECHO 
03.
     ECHO 
04.
) | | ( 
05.
     CALL 
06.
)
erkennt ob ein Fehler vorliegt oder nicht? Gerne auch ein Stichwort nachdem ich googlen und selbst nachlesen kann.
Bitte warten ..
Mitglied: bastla
29.02.2012 um 16:52 Uhr
Hallo FomerMay!

Verknüpfung zweier Anweisungen mit "&&": 2. Anweisung ausführen, wenn kein Fehler bei der 1. Anweisung, mit "||": 2. Anweisung ausführen, wenn Fehler bei der 1. Anweisung ...
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
Bitte warten ..
Mitglied: mathe172
29.02.2012 um 16:57 Uhr
Hallo,

der Code von Bastla macht folgendes:
  • Verschiebe die Datei von a nach b
  • Wenn funktioniert hast (&&), mache das in der ersten Klammer
  • Wenns nicht funktioniert hat (||), mach das in der zweiten

&& und || sind also da, um Befehle zu Verknüpfen, wobei der zweite nur bei (Miss-)Erfolg des ersten ausgeführt wird.

Mit freundlichen Grüßen,
Mathe172
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Batch & Shell
gelöst Seltsames Verhalten bei Errorlevel abfrage in FOR DO Schleife (1)

Frage von Kalma73 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Windows 7
Verteillösung für IT-Raum benötigt (12)

Frage von TheM-Man zum Thema Windows 7 ...