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
GELÖST

ERRORLEVEL-Parameter von einer Batch in eine andere übergeben, OHNE dass ERRORLEVEL bereits ausgeführt wird

Frage Entwicklung Batch & Shell

Mitglied: Kibatsu

Kibatsu (Level 1) - Jetzt verbinden

28.06.2007, aktualisiert 16:27 Uhr, 10239 Aufrufe, 8 Kommentare

Hallo,

ich will / muss mehrere Dateien von unserem Server auf SD-Karten überspielen und vorher ggf. die SD-Karten löschen, falls noch etwas darauf sein sollte.

Damit das Ganze schneller geht habe ich 4 CardReader zusammengebastelt und über ein Hub an den Rechner angeschlossen. Dazu habe ich mir ein Batch erstellt mit einem Menü, dass abfragt, welche Laufwerke bespielt werden sollen.

Entsprechung den Angaben des Benutzers erstellt die Batch dann eine Art Sammelbatch, welche dann die ebenfalls angelegten Batches für die einzelnen angegebenen Laufwerke startet, ergo 1 Batch startet gleichzeitig 4 Batches, welche dann die Datein vom Server gleichzeitig auf alle SD-Karten kopiert ...

Die 4 erstellten Batches sollen auch eine Fehlerabfrage mittels %ERRORLEVEL% machen und ggf. Bescheid sagen, falls Datein nicht kopiert werden konnten.

Mein Problem:
Wenn ich von der 1. Batch (die, die anderen 4 und die Sammelbatch generiert) ECHO %ERRORLEVEL% >> bla.bat verwende, führt er %ERRORLEVEL% bereits hier aus und gibt in der Regel natürlich den Wert 0 weiter.

In meinen 4 erzeugten Batches habe ich dann also keine IF %ERRORLEVEL%==0 Fehlerabfrage mehr, sonder nur noch IF 0==0, da er den %ERRORLEVEL% ja schon gechecked und das negative Ergebnis ja schon weitergegeben hat.

Auf jeden Fall besten Dank an den, der mir hier weiterhelfen kann!


Mit freundlichem Gruße

Kibatsu
Mitglied: bastla
28.06.2007 um 11:08 Uhr
Hallo Kibatsu und willkommen im Forum!

Eigentlich ist mir das Problem nicht klar - wenn in einem der 4 "Unter"-Batches ein Kopierfehler auftritt, kannst Du diesen ja dort abfangen und entsprechend darauf reagieren ...

Vielleicht stellst Du besser einmal etwas Code herein.

Grüße
bastla
Bitte warten ..
Mitglied: Biber
28.06.2007 um 11:12 Uhr
Moin Kibatsu,

willkommen im Forum.

Kannszt Du biite die handvoll relevanter Zeilen posten, also
  • das erstmalige Setzen der Errorlevels in der Hauptbatch
  • die Aufrufe (CALLs?) der Unterbatche
  • und bitte eine Verdeutlichung, ob/wie Du die Unterbatche "generierst".

Dann gehts schneller.

Grüße
Biber
Bitte warten ..
Mitglied: Kibatsu
28.06.2007 um 11:39 Uhr
Auf jeden Fall schon mal besten Dank für die schnelle Rückmeldung ;)
Anbei die denke ich mal relevantesten Zeilen:



:: Abfrage und Festlegung der Variablen

:FIRSTCHOICE
:: SET /P prompted und legt die Variable fest (z.B. F in dem Fall hier)
SET Choice1=
SET /P Choice1=1. Laufwerk:
:: Die folgende Syntax startet den Substring (bei 0 und 1 Zeichen lang)
IF NOT '%Choice1%'=='' SET Choice1=%Choice1:~0,1%


(An der Stelle kommen hier 4 Abfragen, für die 4 Laufwerke, die bespielt werden sollen, ergo :SECONDCHOICE, 3rd, etc...)


:: Pfaderstellung für die dynamischen Leufwerke
IF EXIST C:\Dokumente" "und" "Einstellungen\%USERNAME%\Anwendungsdaten\Batch\ RD /S /Q C:\Dokumente" "und" "Einstellungen\%USERNAME%\Anwendungsdaten\Batch
MKDIR "C:\Dokumente und Einstellungen\%USERNAME%\Anwendungsdaten\Batch"


:: Dynamische Erzeugung der Laufwerke und Löschung, fall bereits vorhanden

IF EXIST "C:\Dokumente und Einstellungen\%USERNAME%\Anwendungsdaten\Batch\Laufwerk %Choice1%.bat" DEL /F "C:\Dokumente und Einstellungen\%USERNAME%\Anwendungsdaten\Batch\Laufwerk %Choice1%.bat"

!!! Jetzt keinen Schreck kriegen, nach dem dicken Block kommt nochmal das Endergebnis, aber der sollte mit rein, damit man den Fehler sehen kann !!!

ECHO @ECHO OFF >> "C:\Dokumente und Einstellungen\%USERNAME%\Anwendungsdaten\Batch\Laufwerk %Choice1%.bat"
ECHO. >> "C:\Dokumente und Einstellungen\%USERNAME%\Anwendungsdaten\Batch\Laufwerk %Choice1%.bat"
ECHO IF EXIST %Choice1%:\ GOTO CHECKFILES >> "C:\Dokumente und Einstellungen\%USERNAME%\Anwendungsdaten\Batch\Laufwerk %Choice1%.bat"
ECHO ECHO Es befindet sich kein Datentraeger im Laufwerk %Choice1%:\ >> "C:\Dokumente und Einstellungen\%USERNAME%\Anwendungsdaten\Batch\Laufwerk %Choice1%.bat"
ECHO PAUSE >> "C:\Dokumente und Einstellungen\%USERNAME%\Anwendungsdaten\Batch\Laufwerk %Choice1%.bat"
ECHO EXIT >> "C:\Dokumente und Einstellungen\%USERNAME%\Anwendungsdaten\Batch\Laufwerk %Choice1%.bat"
ECHO. >> "C:\Dokumente und Einstellungen\%USERNAME%\Anwendungsdaten\Batch\Laufwerk %Choice1%.bat"
ECHO :CHECKFILES >> "C:\Dokumente und Einstellungen\%USERNAME%\Anwendungsdaten\Batch\Laufwerk %Choice1%.bat"
ECHO IF EXIST "S:\neueste Version\" GOTO DELETE >> "C:\Dokumente und Einstellungen\%USERNAME%\Anwendungsdaten\Batch\Laufwerk %Choice1%.bat"
ECHO ECHO Die Quelldatei(en) auf dem Server konnten nicht gefunden werden oder es besteht keine Verbindung zum Netzwerk. >> "C:\Dokumente und Einstellungen\%USERNAME%\Anwendungsdaten\Batch\Laufwerk %Choice1%.bat"
ECHO PAUSE >> "C:\Dokumente und Einstellungen\%USERNAME%\Anwendungsdaten\Batch\Laufwerk %Choice1%.bat"
ECHO EXIT >> "C:\Dokumente und Einstellungen\%USERNAME%\Anwendungsdaten\Batch\Laufwerk %Choice1%.bat"
ECHO. >> "C:\Dokumente und Einstellungen\%USERNAME%\Anwendungsdaten\Batch\Laufwerk %Choice1%.bat"
ECHO :DELETE >> "C:\Dokumente und Einstellungen\%USERNAME%\Anwendungsdaten\Batch\Laufwerk %Choice1%.bat"
ECHO :: Entfernen des Verzeichnisses inkl. aller Unterverzeichnisse ohne Abfrage >> "C:\Dokumente und Einstellungen\%USERNAME%\Anwendungsdaten\Batch\Laufwerk %Choice1%.bat"
ECHO RD /S /Q %Choice1%:\ >> "C:\Dokumente und Einstellungen\%USERNAME%\Anwendungsdaten\Batch\Laufwerk %Choice1%.bat"
ECHO. >> "C:\Dokumente und Einstellungen\%USERNAME%\Anwendungsdaten\Batch\Laufwerk %Choice1%.bat"
ECHO :: Kopiervorgang vom Server auf die SD-Card >> "C:\Dokumente und Einstellungen\%USERNAME%\Anwendungsdaten\Batch\Laufwerk %Choice1%.bat"
ECHO ECHO Die Datei(en) werden nach %Choice1%:\ kopiert. Bitte Warten . . . >> "C:\Dokumente und Einstellungen\%USERNAME%\Anwendungsdaten\Batch\Laufwerk %Choice1%.bat"
ECHO XCOPY /I /C /E /Q /Y "S:\neueste Version\*.*" %Choice1%:\ >> "C:\Dokumente und Einstellungen\%USERNAME%\Anwendungsdaten\Batch\Laufwerk %Choice1%.bat"
ECHO. >> "C:\Dokumente und Einstellungen\%USERNAME%\Anwendungsdaten\Batch\Laufwerk %Choice1%.bat"
ECHO :: Überprüfung des Kopiervorganges (bei Erfolg Fenster schließen, sonst Fehlermeldung ausgeben) >> "C:\Dokumente und Einstellungen\%USERNAME%\Anwendungsdaten\Batch\Laufwerk %Choice1%.bat"
ECHO IF %ERRORLEVEL%==0 GOTO NOERROR >> "C:\Dokumente und Einstellungen\%USERNAME%\Anwendungsdaten\Batch\Laufwerk %Choice1%.bat"
ECHO CLS >> "C:\Dokumente und Einstellungen\%USERNAME%\Anwendungsdaten\Batch\Laufwerk %Choice1%.bat"
ECHO ECHO Die Datei(en) konnten nicht kopiert werden. >> "C:\Dokumente und Einstellungen\%USERNAME%\Anwendungsdaten\Batch\Laufwerk %Choice1%.bat"
ECHO PAUSE >> "C:\Dokumente und Einstellungen\%USERNAME%\Anwendungsdaten\Batch\Laufwerk %Choice1%.bat"
ECHO EXIT >> "C:\Dokumente und Einstellungen\%USERNAME%\Anwendungsdaten\Batch\Laufwerk %Choice1%.bat"
ECHO. >> "C:\Dokumente und Einstellungen\%USERNAME%\Anwendungsdaten\Batch\Laufwerk %Choice1%.bat"
ECHO :NOERROR >> "C:\Dokumente und Einstellungen\%USERNAME%\Anwendungsdaten\Batch\Laufwerk %Choice1%.bat"
ECHO EXIT >> "C:\Dokumente und Einstellungen\%USERNAME%\Anwendungsdaten\Batch\Laufwerk %Choice1%.bat"


Dieser gesammte Block sieht dann in den neu angelegten Datein dann so aus:

@ECHO OFF

IF EXIST F:\ GOTO CHECKFILES
ECHO Es befindet sich kein Datentraeger im Laufwerk F:\
PAUSE
EXIT

:CHECKFILES
IF EXIST "S:\neueste Version\" GOTO DELETE
ECHO Die Quelldatei(en) auf dem Server konnten nicht gefunden werden oder es besteht keine Verbindung zum Netzwerk.
PAUSE
EXIT

:DELETE
:: Entfernen des Verzeichnisses inkl. aller Unterverzeichnisse ohne Abfrage
RD /S /Q F:\

:: Kopiervorgang vom Server auf die SD-Card
ECHO Die Datei(en) werden nach F:\ kopiert. Bitte Warten . . .
XCOPY /I /C /E /Q /Y "S:\neueste Version\*.*" F:\

:: Überprüfung des Kopiervorganges (bei Erfolg Fenster schließen, sonst Fehlermeldung ausgeben)
IF 0==0 GOTO NOERROR (<--- HIER IST DER FEHLER!!!)
CLS
ECHO Die Datei(en) konnten nicht kopiert werden.
PAUSE
EXIT

:NOERROR
EXIT


Hier dann der letzte Teil, der die Sammelbatch auf dem Desktop des Benutzers anlegt:

:: Abfrage, ob noch eine alte Version auf dem Desktop des Benutzers liegt, wenn ja, dann löschen

IF EXIST "C:\Dokumente und Einstellungen\%USERNAME%\Desktop\SD-Card Patcher.bat" DEL /F "C:\Dokumente und Einstellungen\%USERNAME%\Desktop\SD-Card Patcher.bat"

ECHO @ECHO OFF >> "C:\Dokumente und Einstellungen\%USERNAME%\Desktop\SD-Card Patcher.bat"
ECHO. >> "C:\Dokumente und Einstellungen\%USERNAME%\Desktop\SD-Card Patcher.bat"

ECHO START C:\Dokumente" "und" "Einstellungen\%USERNAME%\Anwendungsdaten\Batch\Laufwerk" "%Choice1% >> "C:\Dokumente und Einstellungen\%USERNAME%\Desktop\SD-Card Patcher.bat"
ECHO START C:\Dokumente" "und" "Einstellungen\%USERNAME%\Anwendungsdaten\Batch\Laufwerk" "%Choice2% >> "C:\Dokumente und Einstellungen\%USERNAME%\Desktop\SD-Card Patcher.bat"
ECHO START C:\Dokumente" "und" "Einstellungen\%USERNAME%\Anwendungsdaten\Batch\Laufwerk" "%Choice3% >> "C:\Dokumente und Einstellungen\%USERNAME%\Desktop\SD-Card Patcher.bat"
ECHO START C:\Dokumente" "und" "Einstellungen\%USERNAME%\Anwendungsdaten\Batch\Laufwerk" "%Choice4% >> "C:\Dokumente und Einstellungen\%USERNAME%\Desktop\SD-Card Patcher.bat"
ECHO. >> "C:\Dokumente und Einstellungen\%USERNAME%\Desktop\SD-Card Patcher.bat"
ECHO :: Erstellt am %DATE% um %TIME:~0,2%:%TIME:~3,2%:%TIME:~6,2% von %USERNAME% >> "C:\Dokumente und Einstellungen\%USERNAME%\Desktop\SD-Card Patcher.bat"

ECHO.
ECHO Der SD-Card Patcher wurde mit den von Ihnen angegebenen Laufwerken auf Ihrem Desktop hinterlegt.
ECHO.

PAUSE
EXIT


Die ganzen Befehle werden ja durch den ECHO Befehl weitergegeben in die neuen Datein, nur eben %ERRORLEVEL% wird halt BEREITS BEIM weitergeben ausgeführt und liefert dass Ergebnis 0
-> IF 0==0 GOTO NOERROR

Was ich möchte ist natürlich, dass die 4 Unterbatches am Ende %ERRORLEVEL% checken und NICHT der Batch-Generator.


Nochmals vielen Dank an all jene, die sich den ganzen Batzen durchgelesen haben! ;)
Bitte warten ..
Mitglied: bastla
28.06.2007 um 11:51 Uhr
Hallo Kibatsu!

!!! Jetzt keinen Schreck kriegen ...
Wir sind hier nicht so leicht zu erschrecken ...

Versuch es mit folgender Zeile:
01.
ECHO IF ^%ERRORLEVEL^%==0 GOTO NOERROR >> "C:\Dokumente und Einstellungen\%USERNAME%\Anwendungsdaten\Batch\Laufwerk %Choice1%.bat"
Mit den ^ maskierst Du die %-Zeichen, dadurch werden sie nicht als "Steuerzeichen" interpretiert.

Grüße
bastla
Bitte warten ..
Mitglied: Kibatsu
28.06.2007 um 13:45 Uhr
Hallo bastla!

<code>ECHO IF ^%ERRORLEVEL^%==0 GOTO NOERROR

hat in den 4 Unterbatches leider nur zu

IF ==0 GOTO NOERROR geführt anstatt zu
IF %ERRORLEVEL%==0 GOTO NOERROR

Noch irgendwelche anderen Vorschläge?


Gruß, Kibatsu
Bitte warten ..
Mitglied: bastla
28.06.2007 um 13:53 Uhr
Hallo Kibatsu!

Sorry, nur am Prompt getestet ...

Jetzt aber (mit je einem % mehr):
01.
ECHO IF ^%%ERRORLEVEL^%%==0 GOTO NOERROR >> "C:\Dokumente und Einstellungen\%USERNAME%\Anwendungsdaten\Batch\Laufwerk %Choice1%.bat"
Grüße
bastla
Bitte warten ..
Mitglied: Kibatsu
28.06.2007 um 14:01 Uhr
Hallo bastla,

Jetzt aber (mit je einem % mehr):
<code>ECHO IF ^%%ERRORLEVEL^%%==0 GOTO NOERROR

daran lag's! Nun funktioniert alles. Wer soll denn auf sowas kommen ... -.-"

Ich dank dir vielmals! ;)


Kibatsu
Bitte warten ..
Mitglied: Biber
28.06.2007 um 16:27 Uhr
Hallo Kibatsu,

Fussnote zu bastlas Lösung:

Ausreichend wäre auch ein einfaches
01.
ECHO IF %%ERRORLEVEL%%==0 GOTO NOERROR >>....
...also ohne die Maskierung mit dem Caret ("^").

Aber da es so oder so funktioniert, setze ich mal den Beitrag auf gelöst.

Grüße
Biber
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

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

Ähnliche Inhalte
Windows Server
gelöst Eventlog gesperrtes Konto, Konto als Parameter übergeben (10)

Frage von pablovic zum Thema Windows Server ...

Batch & Shell
Batch Datei wird per Aufgabenplanung nicht ausgeführt (7)

Frage von Corraggiouno zum Thema Batch & Shell ...

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