Batch über eine andere Batch mit Parametern starten
Hallo zusammen,
ich bin gerade daran, eine Backup-Datei zu schreiben, welche mir bestimmte Daten von einem entfernten Rechner kopieren sollen. Soweit so gut, das habe ich hinbekommen. Nun will ich aber das Script automatisieren und er soll mir eine liste mit verschiedenen Rechnernamen nacheinander ansprechen. Leider bekomme ich das nicht ganz so hin. Ich habe mir schon überlegt, dass ganze über 2 Batch files laufen zu lassen.
In dem Fall würde ich in der ersten Batch die Rechner deklarieren und dann die zweite batch mittels call aufrufen. Leider funktioniert das nicht bzw. das erste mal ruft er die zweite Batch auf und dann die nächsten überspringt er einfach.
Hoffe Ihr könnt mir vll helfen.
Das ist mein erstes Script.
Das ist das Zweite Script
ich bin gerade daran, eine Backup-Datei zu schreiben, welche mir bestimmte Daten von einem entfernten Rechner kopieren sollen. Soweit so gut, das habe ich hinbekommen. Nun will ich aber das Script automatisieren und er soll mir eine liste mit verschiedenen Rechnernamen nacheinander ansprechen. Leider bekomme ich das nicht ganz so hin. Ich habe mir schon überlegt, dass ganze über 2 Batch files laufen zu lassen.
In dem Fall würde ich in der ersten Batch die Rechner deklarieren und dann die zweite batch mittels call aufrufen. Leider funktioniert das nicht bzw. das erste mal ruft er die zweite Batch auf und dann die nächsten überspringt er einfach.
Hoffe Ihr könnt mir vll helfen.
Das ist mein erstes Script.
Set Rechner=AKEEE01
call EEEPC_Backup.cmd %Rechner%
Set Rechner=AKEEE02
Call EEEPC_Backup.cmd %Rechner%
Das ist das Zweite Script
Title EEEPC_Backup
echo ############################################################# >>
\\XP\E$\EEEPC_Backup\log.txt
echo. | date | find "Aktuell" >> \\XP\E$\EEEPC_Backup\log.txt
echo. | time | find "Aktuell" >> \\XP\E$\EEEPC_Backup\log.txt
if exist \\%Rechner%\C$\MES\ goto :ping else goto :error2
:ping
ping -n 2 -i 255 -w 130 %Rechner% >> \\XP\E$\EEEPC_Backup\log.txt
if %errorlevel% == 0 goto :exist
if %errorlevel% == 1 goto :error
:exist
if exist \\XP\E$\EEEPC_Backup\%Rechner%\ goto :copy else goto :create
:create
xcopy \\%Rechner%\c$\MES\* \\XP\E$\EEEPC_Backup\%Rechner%\* /T /Y /D
if %errorlevel% == 2 goto :error
if %errorlevel% == 4 goto :error
if %errorlevel% == 5 goto :error
goto :copy
:copy
xcopy \\%Rechner%\c$\MES\* \\XP\E$\EEEPC_Backup\%Rechner%\* /Y /D
if %errorlevel% == 2 goto :error
if %errorlevel% == 4 goto :error
if %errorlevel% == 5 goto :error
xcopy \\%Rechner%\c$\mes\config\* \\XP\E$\EEEPC_Backup\%Rechner%\config\* /Y /D
if %errorlevel% == 2 goto :error
if %errorlevel% == 4 goto :error
if %errorlevel% == 5 goto :error
xcopy \\%Rechner%\c$\mes\dll\* \\XP\E$\EEEPC_Backup\%Rechner%\dll\* /Y /D
if %errorlevel% == 2 goto :error
if %errorlevel% == 4 goto :error
if %errorlevel% == 5 goto :error
xcopy \\%Rechner%\c$\mes\lib\* \\XP\E$\EEEPC_Backup\%Rechner%\lib\* /Y /D
if %errorlevel% == 2 goto :error
if %errorlevel% == 4 goto :error
if %errorlevel% == 5 goto :error
xcopy \\%Rechner%\c$\mes\resources\* \\XP\E$\EEEPC_Backup\%Rechner%\resources\* /Y /D
if %errorlevel% == 2 goto :error
if %errorlevel% == 4 goto :error
if %errorlevel% == 5 goto :error
xcopy \\%Rechner%\c$\mes\logs\*.zip \\XP\E$\EEEPC_Backup\%Rechner%\logs\*.zip /Y /D
if %errorlevel% == 2 goto :error
if %errorlevel% == 4 goto :error
if %errorlevel% == 5 goto :error
echo ############################################################## >>
\\XP\E$\EEEPC_Backup\log.txt
exit
:error
echo Das Programm hat einen Fehler beim Kopieren festgestellt und wurde vorzeitig beendet>>
\\XP\E$\EEEPC_Backup\log.txt
echo ############################################################## >>
\\XP\E$\EEEPC_Backup\log.txt
echo Das Programm hat einen Fehler beim Kopieren festgestellt und wurde vorzeitig beendet>>
\\XP\E$\EEEPC_Backup\errorlog.txt
echo ############################################################## >>
\\XP\E$\EEEPC_Backup\errorlog.txt
exit
:error2
echo Das Verzeichnis mes auf %Rechner% existiert nicht und kann deswegen nicht kopiert
werden >> \\XP\E$\EEEPC_Backup\log.txt
echo Das Verzeichnis mes auf %Rechner% existiert nicht und kann deswegen nicht kopiert
werden >> \\XP\E$\EEEPC_Backup\errorlog.txt
echo ############################################################## >>
\\XP\E$\EEEPC_Backup\errorlog.txt
exit
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 173802
Url: https://administrator.de/contentid/173802
Ausgedruckt am: 22.11.2024 um 05:11 Uhr
17 Kommentare
Neuester Kommentar
moin ITSchlumpf,
es würde auch eine Batch reichen wobei ein Call in eine Sprungmarke genauso abläuft wie ein Call in einen anderen Batch.
die massiven Umleitungen in die LOG kannst Du gleich bei dem Call angeben, somit ersparst Du Dir einige Zeilen bzw. jedesmal denselben Text.
ein exit ohne /b sollte nur gemacht werden wenn die Instanz(Umgebung) geschlossen werden soll.
[Edit]@ Markus nicht zu spät, sondern auch noch ergänzt..
wegen dem IF - Klammern vor die ELSE gesetzt.um zu funktionieren
[/Edit]
[Edit2] die else Klauseln entfernt da unnötig [/Edit2]
Gruß Phil
es würde auch eine Batch reichen wobei ein Call in eine Sprungmarke genauso abläuft wie ein Call in einen anderen Batch.
die massiven Umleitungen in die LOG kannst Du gleich bei dem Call angeben, somit ersparst Du Dir einige Zeilen bzw. jedesmal denselben Text.
for %%i in ("Servera" "ServerB") do call :Backup %%i 1>> "\\XP\E$\EEEPC_Backup\log.txt" 2>> "\\XP\E$\EEEPC_Backup\errorlog.txt"
goto :eof
:Backup
Title EEEPC_Backup %1
echo #############################################################
echo. | date | find "Aktuell"
echo. | time | find "Aktuell"
set "Rechner=%~1"
if NOT exist \\%Rechner%\C$\MES\ goto :error2
:ping
ping -n 2 -i 255 -w 130 %Rechner%
if %errorlevel% == 1 goto :error
:exist
if exist \\XP\E$\EEEPC_Backup\%Rechner%\ goto :copy
:create
xcopy \\%Rechner%\c$\MES\* \\XP\E$\EEEPC_Backup\%Rechner%\* /T /Y /D
if %errorlevel% == 2 goto :error
if %errorlevel% == 4 goto :error
if %errorlevel% == 5 goto :error
xcopy \\%Rechner%\c$\MES\* \\XP\E$\EEEPC_Backup\%Rechner%\* /Y /D
if %errorlevel% == 2 goto :error
if %errorlevel% == 4 goto :error
if %errorlevel% == 5 goto :error
xcopy \\%Rechner%\c$\mes\config\* \\XP\E$\EEEPC_Backup\%Rechner%\config\* /Y /D
if %errorlevel% == 2 goto :error
if %errorlevel% == 4 goto :error
if %errorlevel% == 5 goto :error
xcopy \\%Rechner%\c$\mes\dll\* \\XP\E$\EEEPC_Backup\%Rechner%\dll\* /Y /D
if %errorlevel% == 2 goto :error
if %errorlevel% == 4 goto :error
if %errorlevel% == 5 goto :error
xcopy \\%Rechner%\c$\mes\lib\* \\XP\E$\EEEPC_Backup\%Rechner%\lib\* /Y /D
if %errorlevel% == 2 goto :error
if %errorlevel% == 4 goto :error
if %errorlevel% == 5 goto :error
xcopy \\%Rechner%\c$\mes\resources\* \\XP\E$\EEEPC_Backup\%Rechner%\resources\* /Y /D
if %errorlevel% == 2 goto :error
if %errorlevel% == 4 goto :error
if %errorlevel% == 5 goto :error
xcopy \\%Rechner%\c$\mes\logs\*.zip \\XP\E$\EEEPC_Backup\%Rechner%\logs\*.zip /Y /D
if %errorlevel% == 2 goto :error
if %errorlevel% == 4 goto :error
if %errorlevel% == 5 goto :error
echo ##############################################################
exit /b
:error
echo Das Programm hat einen Fehler beim Kopieren festgestellt und wurde vorzeitig beendet
echo ##############################################################
>&2 echo Das Programm hat einen Fehler beim Kopieren festgestellt und wurde vorzeitig beendet
>&2 echo ##############################################################
exit /b
:error2
echo Das Verzeichnis mes auf %Rechner% existiert nicht und kann deswegen nicht kopiert werden
echo ##############################################################
>&2 echo Das Verzeichnis mes auf %Rechner% existiert nicht und kann deswegen nicht kopiert werden
>&2 echo ##############################################################
exit /b
ein exit ohne /b sollte nur gemacht werden wenn die Instanz(Umgebung) geschlossen werden soll.
[Edit]@ Markus nicht zu spät, sondern auch noch ergänzt..
wegen dem IF - Klammern vor die ELSE gesetzt.um zu funktionieren
[/Edit]
[Edit2] die else Klauseln entfernt da unnötig [/Edit2]
Gruß Phil
Moin ITSchlumpf,
Zum Problem.
In zweiten Script kommen die Parameter in %1, %2, usw. weiter an.
d. h. im zweiten Script muss mindestens etwas derartiges stehen:
Vorschlag
Du kannst das ganze auch in einem Script abhandeln.
Du schreibst die Rechnernamen in eine einfache Textdatei namens
und machst Dein zweites Script wieder zum ersten Script mit der ungetesteten Ergänzung:
Gruß
Markus
[Edit] Wieder zu langsam geschrieben ...[/Edit]
Zum Problem.
In zweiten Script kommen die Parameter in %1, %2, usw. weiter an.
d. h. im zweiten Script muss mindestens etwas derartiges stehen:
Title EEEPC_Backup
Set Rechner=%1
echo ############################################################# >>
\\XP\E$\EEEPC_Backup\log.txt
echo. | date | find "Aktuell" >> \\XP\E$\EEEPC_Backup\log.txt
echo. | time | find "Aktuell" >> \\XP\E$\EEEPC_Backup\log.txt
.
.
Vorschlag
Du kannst das ganze auch in einem Script abhandeln.
Du schreibst die Rechnernamen in eine einfache Textdatei namens
Rechner.txt
. Zum Beispiel soAKEEE01
AKEEE02
und machst Dein zweites Script wieder zum ersten Script mit der ungetesteten Ergänzung:
Title EEEPC_Backup
Set Serverliste=Rechner.txt
for /f %%r in (%Serverliste%) do call :Main %%r
goto :eof
:Main
Set Rechner=%1
echo ############################################################# >>
\\XP\E$\EEEPC_Backup\log.txt
echo. | date | find "Aktuell" >> \\XP\E$\EEEPC_Backup\log.txt
echo. | time | find "Aktuell" >> \\XP\E$\EEEPC_Backup\log.txt
if exist \\%Rechner%\C$\MES\ goto :ping else goto :error2
:ping
ping -n 2 -i 255 -w 130 %Rechner% >> \\XP\E$\EEEPC_Backup\log.txt
if %errorlevel% == 0 goto :exist
if %errorlevel% == 1 goto :error
:exist
if exist \\XP\E$\EEEPC_Backup\%Rechner
Gruß
Markus
[Edit] Wieder zu langsam geschrieben ...[/Edit]
Moin ITSchlumpf,
Denn ich habe die Kurzfassung ausprobiert und ich kann keinen Fehler feststellen.
Oder vielleicht schaust Du selbst noch einmal ....
Gruß
Markus
Hier die getestete Kurzfassung:
[Edit]
Wenn Du gemäß obigen Post noch in Zeile 80 (oder tiefer) das
[/Edit]
Zu früh gefreut.
Dann müßtest Du jetzt mal den Anfang des Scriptes posten.Denn ich habe die Kurzfassung ausprobiert und ich kann keinen Fehler feststellen.
Oder vielleicht schaust Du selbst noch einmal ....
Gruß
Markus
Hier die getestete Kurzfassung:
@echo off & Setlocal
Set Serverliste=Rechner.txt
for /f %%r in (%Serverliste%) do call :Main %%r
goto :eof
:Main
Set Rechner=%1
echo %Rechner%
[Edit]
Wenn Du gemäß obigen Post noch in Zeile 80 (oder tiefer) das
exit /b
hast - das muß natürlich raus bzw. besser durch ein goto :eof
ersetzt werden![/Edit]
Kann es sein, dass ich der For-Schleife einen Rücksprung punkt geben muss
Nein, die Syntax ist schon so richtig. Sonst würde ja die Kurzfassung auch nicht funktionieren.Setz vor dem
xcopy
ein echo
und Du wirst sehen, dass für jede Zeile in der EEEPC.txt
eine Ausgabe erfolgt.Hast Du die Befehlsanzeige wieder eingeschaltet und die Ausgaben geprüft?
Gruß
Markus