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

Batch über eine andere Batch mit Parametern starten

Frage Entwicklung Batch & Shell

Mitglied: ITSchlumpf

ITSchlumpf (Level 1) - Jetzt verbinden

28.09.2011, aktualisiert 14:25 Uhr, 3398 Aufrufe, 17 Kommentare

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.

01.
 Set Rechner=AKEEE01 
02.
call EEEPC_Backup.cmd %Rechner% 
03.
Set Rechner=AKEEE02 
04.
Call EEEPC_Backup.cmd %Rechner% 
Das ist das Zweite Script

01.
Title EEEPC_Backup 
02.
echo ############################################################# >>  
03.
 
04.
\\XP\E$\EEEPC_Backup\log.txt 
05.
echo. | date | find "Aktuell" >> \\XP\E$\EEEPC_Backup\log.txt 
06.
echo. | time | find "Aktuell" >> \\XP\E$\EEEPC_Backup\log.txt 
07.
 
08.
if exist \\%Rechner%\C$\MES\ goto :ping else goto :error2 
09.
 
10.
:ping 
11.
ping -n 2 -i 255 -w 130 %Rechner% >> \\XP\E$\EEEPC_Backup\log.txt 
12.
 
13.
if %errorlevel% == 0 goto :exist 
14.
if %errorlevel% == 1 goto :error 
15.
 
16.
:exist 
17.
 
18.
if exist \\XP\E$\EEEPC_Backup\%Rechner%\ goto :copy else goto :create 
19.
 
20.
:create 
21.
xcopy \\%Rechner%\c$\MES\* \\XP\E$\EEEPC_Backup\%Rechner%\* /T /Y /D 
22.
if %errorlevel% == 2 goto :error 
23.
if %errorlevel% == 4 goto :error 
24.
if %errorlevel% == 5 goto :error 
25.
 
26.
goto :copy 
27.
 
28.
:copy 
29.
 
30.
xcopy \\%Rechner%\c$\MES\* \\XP\E$\EEEPC_Backup\%Rechner%\*  /Y /D 
31.
if %errorlevel% == 2 goto :error 
32.
if %errorlevel% == 4 goto :error 
33.
if %errorlevel% == 5 goto :error 
34.
 
35.
xcopy \\%Rechner%\c$\mes\config\* \\XP\E$\EEEPC_Backup\%Rechner%\config\* /Y /D 
36.
if %errorlevel% == 2 goto :error 
37.
if %errorlevel% == 4 goto :error 
38.
if %errorlevel% == 5 goto :error 
39.
 
40.
xcopy \\%Rechner%\c$\mes\dll\* \\XP\E$\EEEPC_Backup\%Rechner%\dll\* /Y /D 
41.
if %errorlevel% == 2 goto :error 
42.
if %errorlevel% == 4 goto :error 
43.
if %errorlevel% == 5 goto :error 
44.
 
45.
xcopy \\%Rechner%\c$\mes\lib\* \\XP\E$\EEEPC_Backup\%Rechner%\lib\* /Y /D 
46.
if %errorlevel% == 2 goto :error 
47.
if %errorlevel% == 4 goto :error 
48.
if %errorlevel% == 5 goto :error 
49.
 
50.
xcopy \\%Rechner%\c$\mes\resources\* \\XP\E$\EEEPC_Backup\%Rechner%\resources\* /Y /D 
51.
if %errorlevel% == 2 goto :error 
52.
if %errorlevel% == 4 goto :error 
53.
if %errorlevel% == 5 goto :error 
54.
 
55.
xcopy \\%Rechner%\c$\mes\logs\*.zip \\XP\E$\EEEPC_Backup\%Rechner%\logs\*.zip /Y /D 
56.
if %errorlevel% == 2 goto :error 
57.
if %errorlevel% == 4 goto :error 
58.
if %errorlevel% == 5 goto :error 
59.
 
60.
echo ############################################################## >>  
61.
 
62.
\\XP\E$\EEEPC_Backup\log.txt 
63.
exit 
64.
 
65.
:error 
66.
echo Das Programm hat einen Fehler beim Kopieren festgestellt und wurde vorzeitig beendet>>  
67.
 
68.
\\XP\E$\EEEPC_Backup\log.txt 
69.
 
70.
echo ############################################################## >>  
71.
 
72.
\\XP\E$\EEEPC_Backup\log.txt 
73.
 
74.
echo Das Programm hat einen Fehler beim Kopieren festgestellt und wurde vorzeitig beendet>>  
75.
 
76.
\\XP\E$\EEEPC_Backup\errorlog.txt 
77.
echo ############################################################## >>  
78.
 
79.
\\XP\E$\EEEPC_Backup\errorlog.txt 
80.
exit 
81.
 
82.
:error2 
83.
echo Das Verzeichnis mes auf %Rechner% existiert nicht und kann deswegen nicht kopiert  
84.
 
85.
werden >> \\XP\E$\EEEPC_Backup\log.txt 
86.
echo Das Verzeichnis mes auf %Rechner% existiert nicht und kann deswegen nicht kopiert  
87.
 
88.
werden >> \\XP\E$\EEEPC_Backup\errorlog.txt 
89.
echo ############################################################## >>  
90.
 
91.
\\XP\E$\EEEPC_Backup\errorlog.txt 
92.
exit 
Mitglied: pieh-ejdsch
28.09.2011 um 09:59 Uhr
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.

01.
for %%i in ("Servera" "ServerB") do call :Backup %%i 1>> "\\XP\E$\EEEPC_Backup\log.txt" 2>> "\\XP\E$\EEEPC_Backup\errorlog.txt" 
02.
 
03.
goto :eof 
04.
 
05.
:Backup 
06.
Title EEEPC_Backup %1 
07.
echo ############################################################# 
08.
echo. | date | find "Aktuell" 
09.
echo. | time | find "Aktuell" 
10.
 
11.
set "Rechner=%~1" 
12.
if NOT exist \\%Rechner%\C$\MES\ goto :error2 
13.
 
14.
:ping 
15.
ping -n 2 -i 255 -w 130 %Rechner% 
16.
 
17.
if %errorlevel% == 1 goto :error 
18.
 
19.
:exist 
20.
 
21.
if exist \\XP\E$\EEEPC_Backup\%Rechner%\ goto :copy 
22.
 
23.
:create 
24.
xcopy \\%Rechner%\c$\MES\* \\XP\E$\EEEPC_Backup\%Rechner%\* /T /Y /D 
25.
if %errorlevel% == 2 goto :error 
26.
if %errorlevel% == 4 goto :error 
27.
if %errorlevel% == 5 goto :error 
28.
 
29.
xcopy \\%Rechner%\c$\MES\* \\XP\E$\EEEPC_Backup\%Rechner%\*  /Y /D 
30.
if %errorlevel% == 2 goto :error 
31.
if %errorlevel% == 4 goto :error 
32.
if %errorlevel% == 5 goto :error 
33.
 
34.
xcopy \\%Rechner%\c$\mes\config\* \\XP\E$\EEEPC_Backup\%Rechner%\config\* /Y /D 
35.
if %errorlevel% == 2 goto :error 
36.
if %errorlevel% == 4 goto :error 
37.
if %errorlevel% == 5 goto :error 
38.
 
39.
xcopy \\%Rechner%\c$\mes\dll\* \\XP\E$\EEEPC_Backup\%Rechner%\dll\* /Y /D 
40.
if %errorlevel% == 2 goto :error 
41.
if %errorlevel% == 4 goto :error 
42.
if %errorlevel% == 5 goto :error 
43.
 
44.
xcopy \\%Rechner%\c$\mes\lib\* \\XP\E$\EEEPC_Backup\%Rechner%\lib\* /Y /D 
45.
if %errorlevel% == 2 goto :error 
46.
if %errorlevel% == 4 goto :error 
47.
if %errorlevel% == 5 goto :error 
48.
 
49.
xcopy \\%Rechner%\c$\mes\resources\* \\XP\E$\EEEPC_Backup\%Rechner%\resources\* /Y /D 
50.
if %errorlevel% == 2 goto :error 
51.
if %errorlevel% == 4 goto :error 
52.
if %errorlevel% == 5 goto :error 
53.
 
54.
xcopy \\%Rechner%\c$\mes\logs\*.zip \\XP\E$\EEEPC_Backup\%Rechner%\logs\*.zip /Y /D 
55.
if %errorlevel% == 2 goto :error 
56.
if %errorlevel% == 4 goto :error 
57.
if %errorlevel% == 5 goto :error 
58.
 
59.
echo ##############################################################  
60.
 
61.
exit /b 
62.
 
63.
:error 
64.
echo Das Programm hat einen Fehler beim Kopieren festgestellt und wurde vorzeitig beendet 
65.
echo ############################################################## 
66.
>&2 echo Das Programm hat einen Fehler beim Kopieren festgestellt und wurde vorzeitig beendet 
67.
>&2 echo ############################################################## 
68.
 
69.
 
70.
exit /b 
71.
 
72.
:error2 
73.
 
74.
echo Das Verzeichnis mes auf %Rechner% existiert nicht und kann deswegen nicht kopiert werden 
75.
echo ############################################################## 
76.
 
77.
>&2 echo Das Verzeichnis mes auf %Rechner% existiert nicht und kann deswegen nicht kopiert werden 
78.
>&2 echo ############################################################## 
79.
 
80.
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
Bitte warten ..
Mitglied: BigWim
28.09.2011 um 10:11 Uhr
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:

01.
Title EEEPC_Backup 
02.
Set Rechner=%1 
03.
echo ############################################################# >>  
04.
 
05.
\\XP\E$\EEEPC_Backup\log.txt 
06.
echo. | date | find "Aktuell" >> \\XP\E$\EEEPC_Backup\log.txt 
07.
echo. | time | find "Aktuell" >> \\XP\E$\EEEPC_Backup\log.txt 
08.
09.
.

Vorschlag
Du kannst das ganze auch in einem Script abhandeln.

Du schreibst die Rechnernamen in eine einfache Textdatei namens Rechner.txt. Zum Beispiel so
01.
AKEEE01 
02.
AKEEE02
und machst Dein zweites Script wieder zum ersten Script mit der ungetesteten Ergänzung:

01.
Title EEEPC_Backup 
02.
Set Serverliste=Rechner.txt 
03.
 
04.
for /f %%r in (%Serverliste%) do call :Main %%r 
05.
goto :eof 
06.
 
07.
:Main 
08.
Set Rechner=%1 
09.
echo ############################################################# >>  
10.
 
11.
\\XP\E$\EEEPC_Backup\log.txt 
12.
echo. | date | find "Aktuell" >> \\XP\E$\EEEPC_Backup\log.txt 
13.
echo. | time | find "Aktuell" >> \\XP\E$\EEEPC_Backup\log.txt 
14.
 
15.
if exist \\%Rechner%\C$\MES\ goto :ping else goto :error2 
16.
 
17.
:ping 
18.
ping -n 2 -i 255 -w 130 %Rechner% >> \\XP\E$\EEEPC_Backup\log.txt 
19.
 
20.
if %errorlevel% == 0 goto :exist 
21.
if %errorlevel% == 1 goto :error 
22.
 
23.
:exist 
24.
 
25.
if exist \\XP\E$\EEEPC_Backup\%Rechner
Gruß
Markus

[Edit] Wieder zu langsam geschrieben ...[/Edit]
Bitte warten ..
Mitglied: ITSchlumpf
28.09.2011 um 10:53 Uhr
Hallo ihr zwei,

danke für die Fixe hilfe. Werd es so bald als möglich testen, aber sieht schon recht gut aus. Das mit der Schleife hatte ich auch mal gesehen aber wusste nicht genau wie.

Noch ne kurze frage zu der Schleife. Die Variable %%r ist dann die Variable mit den Rechnernamen oder sehe ich das falsch?

Vielen dank.

Gruß
Schlumpf
Bitte warten ..
Mitglied: BigWim
28.09.2011 um 12:46 Uhr
Moin ITSchlumpf,

Die Variable %%r ist dann die Variable mit den Rechnernamen
Ja.
oder sehe ich das falsch?
Nein.

Die For-Schleife liest die Datei zeilenweise und pro Zeile wird dann :Main aufgerufen.
Hier im Forum gibt es Superanleitungen zur FOR-Schleife.

Gruß
Markus
Bitte warten ..
Mitglied: ITSchlumpf
28.09.2011 um 13:31 Uhr
Also habe es gerade mal getestet und leider funktioniert es nicht

Beim Start in die Schleife bricht er sofort ab. woran kann das liegen? Ö.ö

Gruß
Schlumpf

[edit] also habe grad mal noch rumprobiert, und er läuft in die Schleife rein bricht dann aber schlagartig ab. [/Edit]

[Edit] Problem gefunden. nur ne Lösung habe ich dafür noch nicht. Er übergibt die Variable %%r nicht in die Abfragen.[/Edit]

[Edit] So sry habs problem gelöst. Wer lesen kann ist klar im Vorteil. Hatte ausversehen mit der %%r in den abfragen gearbeitet anstatt %1 für den 1. Parameter zu nutzen. *Kopf -> Tisch* [/Edit]

Programm läuft jetzt sauber durch. Danke nochmal

Gruß

Schlumpf
Bitte warten ..
Mitglied: ITSchlumpf
28.09.2011 um 14:26 Uhr
Zu früh gefreut. Jetzt ist das Programm grad durchgelaufen und steigt nach dem ersten durchlauf aus. Der Ignoriert die Schleife bzw. weiß net das er wieder oben anfangen muss so wie das aussieht.
Bitte warten ..
Mitglied: BigWim
28.09.2011 um 14:34 Uhr
Moin ITSchlumpf,

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:
01.
@echo off & Setlocal 
02.
Set Serverliste=Rechner.txt 
03.
 
04.
for /f %%r in (%Serverliste%) do call :Main %%r 
05.
goto :eof 
06.
 
07.
:Main 
08.
Set Rechner=%1 
09.
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]
Bitte warten ..
Mitglied: ITSchlumpf
28.09.2011 um 14:42 Uhr
Hab es so auch getestet als es nicht ging und da lief er schön durch aber jetzt bricht er mir nach einem durchlauf ab.
Was bewirkt das SetLocal?

01.
Title EEEPC_Backup 
02.
Set Serverliste=EEEPC.txt 
03.
 
04.
for /f %%r in (%Serverliste%) do call :Main %%r 
05.
 
06.
:Main  
07.
Set Rechner=%1

Gruß
Schlumpf
Bitte warten ..
Mitglied: BigWim
28.09.2011 um 14:47 Uhr
Was bewirkt das SetLocal?
Dann brauche ich die Variablen am Ende Scripts nicht mehr zu löschen
z. B. Set Serverliste=

Mehr Details
Setlocal /?

Gruß
Markus
Bitte warten ..
Mitglied: BigWim
28.09.2011 um 14:59 Uhr
Vielleicht war ich mit meiner nachträglichen Änderung des Beitrags zu spät.

Deshalb noch einmal so

[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]


Gruß
Markus
Bitte warten ..
Mitglied: ITSchlumpf
28.09.2011 um 15:03 Uhr
Das hab ich grad vorher gesehen und es mir eig auch schon gedacht, dass die ja eig mein Programm dann abbrechen und raus müssen
Jetzt wollte ich grad mal das ganze abgespeckt testen und bekomme die Fehlermeldung "unzulässige Parameteranzahl" obwohl der Befehl in der kompletten Batch durch läuft.

01.
 @echo off & Setlocal  
02.
Set Serverliste=EEEPC.txt  
03.
 
04.
for /f %%r in (%Serverliste%) do call :Main %%r  
05.
 
06.
goto :eof  
07.
 
08.
:Main  
09.
Set Rechner=%1  
10.
xcopy \\%Rechner%\c$\rqm-mes\* \\xp91\C$\EEEPC_Backup\%Rechner%\* /T /Y /D 
11.
 
12.
pause
Ist bestimmt mal wieder ein ganz kleines Problem.

[Edit] Also Batch will mich glaub verarschen. In der Backup Batch laufen die Befehle durch ohne Problem und in einer abgespeckten Variante mit lediglich den copy befehlen bekomme ich Fehlermeldungen. Komisch. [/Edit]
Bitte warten ..
Mitglied: BigWim
28.09.2011 um 15:27 Uhr
Jetzt wollte ich grad mal das ganze abgespeckt testen und bekomme die Fehlermeldung "unzulässige Parameteranzahl"
In solchen Fällen stört natürlich ein echo off. Bei Fehlersuche in ein echo on Pflicht!

Ist bestimmt mal wieder ein ganz kleines Problem.
Werden wir dann ja sehen

Gruß
Markus
Bitte warten ..
Mitglied: ITSchlumpf
28.09.2011 um 15:45 Uhr
Kann es sein, dass ich der For-Schleife einen Rücksprung punkt geben muss. Also wie bei Java z.B. { }. Weil mir ist jetzt aufgefallen, dass das Programm nach dem letzten Befehl in dem :Main Bereich (eintrag in das logfile) direkt abbricht. Habe danach ein Pause gesetzt und das liest er schon garnicht mehr.
Bitte warten ..
Mitglied: BigWim
28.09.2011 um 15:56 Uhr
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
Bitte warten ..
Mitglied: ITSchlumpf
28.09.2011 um 16:00 Uhr
Memo an mich selbst, arbeite nicht mehr mit dem Notepad sondern nur noch mit Notepad++ -.-
Also Problem gelöst, lag nur an der formatierung vom Notepad der hat das etwas gestückelt. Einmal mit Notepad++ aufmachen reinschauen sehen ah ja da hängt was nicht mehr zusammen und schon geht alles wieder. Es ist getestet und funktioniert.

Danke für die tolle Unterstützung.

Gruß

Schlumpf
Bitte warten ..
Mitglied: BigWim
29.09.2011 um 08:33 Uhr
Moin ITSchlumpf

kannst Du bitte den Beitrag auf gelöst setzen.

Danke für die tolle Unterstützung.
Gern geschehen. Und weiter viel Erfolg


Gruß
Markus
Bitte warten ..
Mitglied: ITSchlumpf
29.09.2011 um 10:17 Uhr
Ups total vergessen. Danke fürs erinnern
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
Batch & Shell
gelöst Batch, Aufgabe mit höchsten Previlegien soll Outlook "normal" starten (6)

Frage von Zunaras zum Thema Batch & Shell ...

Batch & Shell
gelöst Batch erst starten wenn bestimmte Datei vorhanden ist (7)

Frage von pdiddo zum Thema Batch & Shell ...

Batch & Shell
Dateinamen nach Zeichnen abschneiden - Batch-Shell (9)

Frage von cberndt zum Thema Batch & Shell ...

Batch & Shell
CMD Verschlüsslung ( Batch ) (11)

Frage von clragon zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

Microsoft Office
Keine Updates für Office 2016 (12)

Frage von Motte990 zum Thema Microsoft Office ...

Grafikkarten & Monitore
Tonprobleme bei Fernseher mit angeschlossenem Laptop über HDMI (11)

Frage von Y3shix zum Thema Grafikkarten & Monitore ...