dynastie
Goto Top

Batch-Datei xcopy Errorlevel

[Edit] Auf "Gelöst" gesetzt und aus "Entwicklung" den Bereich "Batch & Shell" verschoben
Biber, Mod
[/Edit]

Hallo,

ich habe ein kleines Problem mit dem Befehl xcopy. Ich möchte gerne den Errorlevel verwenden, um im Fehlerfalle die .bat abzubrechen. Zur Kontrolle gebe ich die Errorlevel zunächst auf dem Bildschirm aus. Leider gibt das Ding mir immer 0 aus. In einem Falle gibt er mir 0,1,2,3,4 aus. Die zu kopierende Datei war im Quellverzeichnis nicht vorhanden. Sollte er in meinem Falle nicht 1 ausgeben (keine Dateien zum kopieren gefunden)?

Also irgendwie hab ich da wohl was falsch verstanden. Kann mir jemand erklären wie ich mit den Errorleveln umgehe? Er soll eben beim Errorlevel = 0 (ohne Fehler kopiert lt. Doku) weitermachen. In allen anderen Fällen, soll er die .bat verlassen.

xcopy c:\Quellverzeichnis\zukopierendeDatei.datei c:\Zielverzeichnis /C /D /E /H /R /Y /F 1>>%LOG_FILE_NAME% 2>>&1
echo.
if errorlevel 0 echo 0
if errorlevel 1 echo 1
if errorlevel 2 echo 2
if errorlevel 3 echo 3
if errorlevel 4 echo 4
if errorlevel 5 echo 5
pause


Danke.

Gruß

Tatjana

Content-Key: 35383

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

Printed on: April 23, 2024 at 09:04 o'clock

Member: Biber
Biber Jul 04, 2006 at 15:07:14 (UTC)
Goto Top
Moin dynastie,

Du musst den Errorlevel in absteigender Reihenfolge prüfen.

Denn "if errorlevel 0" bedeutet nicht "wenn ErrorLevel gleich 0" , sondern "wenn ErrorLevel MINDESTENS 0".

Also mach es so herum:
Xcopy...bla...
if errorlevel 5 echo 5
if errorlevel 4 echo 4
if errorlevel 3 echo 3
if errorlevel 2 echo 2
if errorlevel 1 echo 1
if errorlevel 0 echo 0

...und von da an vereinfachen.
if errorlevel 5 echo 5 ...aber den gibts gar nicht bei XCopy...
if errorlevel 4 echo 4 ---richtig doller Fehler... zu wenig Hauptspeicher zum Kopieren
if errorlevel 3 echo 3 
if errorlevel 2 echo 2 ---Problem vor dem Bildschirm...Syntaxfehler
if errorlevel 1 echo 1  && goto irgendeinFehler
if errorlevel 0 echo 0 alles Prima
goto Normalweiter

:irgendeinFehler
@Echo Xcopy ging in die Grütze...ich hör auf
goto :eof

:NormalWeiter
@echo ...habs geschafft, soll ich noch mal?
pause

Hope That Helps
Biber
Member: dynastie
dynastie Jul 05, 2006 at 09:55:15 (UTC)
Goto Top
Hallo,

danke für die Antwort. Das trifft's mein Problem nicht so ganz. Mittlerweile bin ich bei diesem Code angekommen:


echo Bitte warten ...
xcopy C:\Quellverzeichnis\Quelldatei.mdb c:\Zielverzeichnis /C /D /E /H /R /Y /F /I 1>>%LOG_FILE_NAME% 2>>&1
echo.
echo %errorlevel%
if %errorlevel%==0 goto KOPIERENOK
if not %errorlevel%==0 goto KOPIERENFEHLER
pause

:KOPIERENFEHLER
echo Beim Kopieren der Datei Quelldatei.mdb ist ein Fehler aufgetreten.
pause
exit

Das funktioniert soweit. Aber nun habe ich das Problem, dass wenn das Zielverzeichnis nicht existiert, gibt er mir trotzdem den Errorlevel null aus und springt nach KOPIERENOK. Das soll er natürlich nicht tu'n.

Das Problem habe ich wenn die Quelldatei.mdb zwar existiert, aber das Zielverzeichnis nicht.

Kennt jemand ne Lösung?

Danke.

Gruß

Tatjana
Member: Biber
Biber Jul 05, 2006 at 10:41:16 (UTC)
Goto Top
Moin dynastie,
wenn das Zielverzeichnis nicht existiert, gibt er mir trotzdem den Errorlevel null aus
und springt nach KOPIERENOK.
Nicht trotzdem. Sondern weil es kein Fehler ist. XCOPY kopiert ja ggf. incl. Verzeichnis-Neuanlegen.
Das soll er natürlich nicht tu'n.
"tu'n"? Welchen Buchstaben hast Du denn ausgelassen? Ein "h"? face-wink

Wenn Du vorher prüfen willst, ob ein Verzeichnis/eine Datei existiert, dann musst Du das mit
"if exist x:\pfad"
- oder
"if exist y:\pfad\datei.xyz"
selber machen.
Aber vor dem XCOPY-Aufruf.
IF NOT EXIST %ZIELVERZEICHNIS%\%ZIELDATEI% ECHO Zieldatei noch nicht vorhanden.
XCOPY ....
...

Grüsse
Biber
Member: dynastie
dynastie Jul 05, 2006 at 12:10:01 (UTC)
Goto Top
Hallo,
ok ich seh's ja ein face-wink

Hab's jetzt so gelöst:

echo Bitte warten ...
IF NOT EXIST %ZIELVERZEICHNIS% mkdir %ZIELVERZEICHNIS%
xcopy %QUELLVERZEICHNIS%\%QUELLDATEI% %ZIELVERZEICHNIS% /C /D /E /H /R /Y /F /I 1>>%LOG_FILE_NAME% 2>>&1
echo.
if %errorlevel%==0 goto KOPIERENOK
if not %errorlevel%==0 goto KOPIERENFEHLER
pause

:KOPIERENFEHLER
echo Beim Kopieren der Datei dbinfo.mdb ist ein Fehler aufgetreten.
pause
exit

Dachte wieso das Verzeihcnis nicht gleich anlegen wenn man's eh unbedingt braucht und es fehlt. Jetzt tut's so wie ich es mir vorstelle.

Gruß

Tatjana