115129
Goto Top

Batch - Warten auf Fertigstellung einer Zeilenabarbeitung, dann Skript fortsetzen

Hallo zusammen,

ich benötige zu dem unteren Ausschnitt einer Batchdatei eure Hilfe.

Das gesamte Script dient als Backuplösung eines vordenfinierten Ordners, welcher mit Winrar archiviert und mit einem Passwort versehen wird.
Dieser Vorgang funktioniert auch einwandfrei, jedoch wird nicht auf die Fertigstellung des Archivs (Backup.rar) gewartet, sondern die nächste Zeile wird gestartet bzw. das Skript fortgeführt.

Gibt es ein Befehl, mit dem ich bestimmen kann, dass das Skript bei der Abarbeitung der Zeile...
"C:\Program Files\WinRAR\rar.exe" a -r -u -hpMeinPasswort -xBackup.rar "C:\_PRIVAT\Backup.rar" "C:\_PRIVAT\*.*" >NUL
die nächste Zeile erst starten darf, wenn das Archiv erfolgreich archiviert bzw. der Vorgang abgeschlossen wurde?

::BACKUP ERSTELLEN BZW. AKTUALISIEREN, ARCHIVIEREN UND MIT PASSWORT VERSEHEN
echo VORGANG 04:
echo    Backup wird erstellt/aktualisiert, archiviert und mit einem Passwort versehen.
echo    ...in Bearbeitung...
ping 127.0.0.1 -n 3 >nul
"C:\Program Files\WinRAR\rar.exe" a -r -u -hpMeinPasswort -xBackup.rar "C:\_PRIVAT\Backup.rar" "C:\_PRIVAT\*.*" >NUL  
echo    ...Backup wurde erstellt/aktualisiert, naechster Vorgang wird gestartet.
echo.

Vielen Dank schonmal im Voraus face-smile

Gruß,
Blattlaus

Content-Key: 291946

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

Printed on: April 25, 2024 at 15:04 o'clock

Member: laster
Solution laster Dec 30, 2015 updated at 17:24:09 (UTC)
Goto Top
Hallo Blattlaus,

start "Titel" /WAIT rar.exe ...  

vG
LS
Mitglied: 122990
Solution 122990 Dec 30, 2015 updated at 17:24:19 (UTC)
Goto Top
Moin,
das wäre aber sehr komisch das rar hier asynchron arbeitet. Kann ich hier auch nicht nachvollziehen das das so wäre.

Du kannst aber mit
start "" /wait <deinecodezeile>  

arbeiten. Das geht natürlich auch nur wenn der Prozess nicht asynchron arbeitet und direkt zurück auf die CMD wechselt, was rar aber wie gesagt in der Kommandozeilenversion nicht macht.

Gruß grexit
Mitglied: 115129
115129 Dec 30, 2015 at 17:10:13 (UTC)
Goto Top
Hallo und Danke für Eure Antworten.

@122990:
Ich habe deinen Vorschlag mal übernommen und sieht nun wie folgt aus:
start "" /wait "C:\Program Files\WinRAR\rar.exe" a -r -u -hpMeinPasswort -xBackup.rar "C:\_PRIVAT\Backup.rar" "C:\_PRIVAT\*.*" >NUL  

Diese Variante funktioniert nun, allerdings wird bei der Abarbeitung ein zweites Shellfenster geöffnet und bei Abschluss geschlossen. Kann die gesamte Abarbeitung in einem Shellfenster belassen werden?

Gruß,
Blattlaus
Member: laster
laster Dec 30, 2015 at 17:14:40 (UTC)
Goto Top
siehe Parameter zu start (http://ss64.com/nt/start.html), probier es mit /min - wenn das reicht.
Ansonsten kannst Du nicht ein neues Fenster verhindern, weil das immer durch START erzeugt wird (eigener Prozess).
vG
LS
Mitglied: 115129
115129 Dec 30, 2015 at 17:21:39 (UTC)
Goto Top
Hallo,

Danke für die Info, habe mir den Link mal in meine Favoriten gelegt ;)

Gut, dann muss ich wohl mit dem zweiten Shellfenster leben, hauptsache die Funktion ist gegeben und das passt.

Vielen Dank für Eure Hilfe,
und ein guter bevorstehender Start ins neue Jahr.

Gruß,
Blattlaus
Mitglied: 122990
122990 Dec 30, 2015 updated at 17:32:53 (UTC)
Goto Top
Mysteriös ist eher das bei dir rar nicht wartet, ist hier jedenfalls nicht so. Das kehrt erst zur Shell zurück wenn der Vorgang beendet ist.
Lass mal die Umleitung des StdOut (>NUL) weg.
Woher nimmst du die Annahme das rar nicht wartet ?
Mitglied: 115129
115129 Dec 30, 2015 at 17:42:27 (UTC)
Goto Top
Hi gerxit,

Lass mal die Umleitung des StdOut (>NUL) weg.
mit ">NUL" möchte ich nur die Ausgabe verhindern, was archiviert wird.

Woher nimmst du die Annahme das rar nicht wartet ?
Nach der Archivierung der Backup.rar wird diese auf ein Netzlaufwerk kopiert, da die Dateigröße >2GB ist, dauert der Kopiervorgang dementsprechend.
Nach diesem Kopiervorgang wird noch ein Programm (.exe) gestartet und genau hier liegt das eigentliche Problem, diese .exe wird während des Achivierungsvorgangs schon gestartet, soll aber erst am Ende des Scripts gestartet werden.
Nutze ich wie von euch vorgeschlagen...
start "" /wait "C:\Program Files\WinRAR\rar.exe" a -r -u -hpMeinPasswort -xBackup.rar "C:\_PRIVAT\Backup.rar" "C:\_PRIVAT\*.*" >NUL  
...funktioniert alles wie es soll, d.h. die .exe wird ganz am Schluss gestartet.
Mitglied: 122990
122990 Dec 30, 2015 updated at 18:10:23 (UTC)
Goto Top
OK ist ein Workaround, ändert aber nichts daran das das dieses Verhalten absolut nicht normal ist. Welche WinRAR Version und OS verwendest du ?
Ich tippe eher auf irgendeinen anderen Fehler im Skript.
Mitglied: 115129
115129 Dec 30, 2015 at 19:08:55 (UTC)
Goto Top
Zitat von @122990:

OK ist ein Workaround, ändert aber nichts daran das das dieses Verhalten absolut nicht normal ist. Welche WinRAR Version und OS verwendest du ?
Ich tippe eher auf irgendeinen anderen Fehler im Skript.

Winrar 5.2 und Windows 7 Pro.

Hier noch mein komplettes Skript:
(Nicht lachen, habe ich aus meiner Unwissenheit zusammengeschustert)

@echo Off & setLocal

::ES WIRD 10X GEPRUEFT, OB SERVER ERREICHBAR
echo VORGANG 01:
echo    30X pruefen, ob Server erreichbar.
echo    ...in Bearbeitung...

:loop
set /a cnt+=1
echo    ...Pruefvorgang %cnt% von 30...
echo    ...in Bearbeitung...
if %cnt% geq 30 goto :end
Ping -n 5 192.168.1.50 | find /i "TTL" >NUL  
IF ERRORLEVEL 1 goto :loop
echo    ...Server erreichbar, naechster Vorgang wird gestartet.
echo.

::PRUEFEN OB HEUTIGES BACKUP VORHANDEN IST
echo VORGANG 02:
echo    Pruefen ob heutiges Backup bereits existiert.
echo    ...in Bearbeitung...
if NOT exist "\\SERVER\Backup\%date:~-4%.%date:~-7,2%.%date:~-10,2%\Backup.rar" goto Nichtvorhanden  
ping 127.0.0.1 -n 3 >nul
if exist "\\SERVER\Backup\%date:~-4%.%date:~-7,2%.%date:~-10,2%\Backup.rar" goto Vorhanden  

:Nichtvorhanden
echo    ...heutiges Backup existiert nicht, naechster Vorgang wird gestartet.
echo.
::FOTOS SICHERN
echo VORGANG 03:
echo    Fotos sichern.
echo    ...in Bearbeitung...
ping 127.0.0.1 -n 3 >nul
xcopy /DEY "D:\Fotos" "C:\_PRIVAT\Fotos" >NUL  
echo    ...Fotos wurden gesichert, naechster Vorgang wird gestartet.
echo.

::ANZAHL DER BACKUP PRUEFEN UND GGFLS. LOESCHEN
echo VORGANG 04:
echo    Anzahl der Backups auf Server pruefen/loeschen.
echo    ...in Bearbeitung...
ping 127.0.0.1 -n 3 >nul
set "Pfad=\\SERVER\Backup"  
set Anzahl=7
for /f "skip=%Anzahl%" %%i in ('dir /b /o-n /ad "%Pfad%"') do rd /s /q "%Pfad%\%%i" >NUL  
echo    ...Pruefung abgeschlossen, naechster Vorgang wird gestartet.
echo.

::BACKUP ERSTELLEN BZW. AKTUALISIEREN, ARCHIVIEREN UND MIT PASSWORT VERSEHEN
echo VORGANG 04:
echo    Backup wird erstellt/aktualisiert, archiviert und mit einem Passwort versehen.
echo    ...in Bearbeitung...
ping 127.0.0.1 -n 3 >nul
start "" /wait "C:\Program Files\WinRAR\rar.exe" a -r -u -hpMeinPasswort -xBackup.rar "C:\_PRIVAT\Backup.rar" "C:\_PRIVAT\*.*" >NUL  
echo    ...Backup wurde erstellt/aktualisiert, naechster Vorgang wird gestartet.
echo.

::BACKUP KOPIEREN VON NOTEBOOK NACH SERVER
echo VORGANG 05:
echo    Das Backup vom Notebook auf Server in das heutige Verzeichnis kopieren.
echo    ...in Bearbeitung...
xcopy /DY "C:\_PRIVAT\Backup.rar" "\\SERVER\Backup\%date:~-4%.%date:~-7,2%.%date:~-10,2%\" >NUL  
echo    ...das Backup wurde kopiert, naechster Vorgang wird gestartet.
echo.
echo VORGANG 06:
echo    Zum Abschluss wird das Programm "Easy2Sync" gestartet.  
echo    ...in Bearbeitung...
ping 127.0.0.1 -n 5 >nul
%str%="C:\Program Files (x86)\Easy2Sync for Outlook\E2S4Outlook.exe"  
call %str%
Exit

:end
::SERVER NICHT ERREICHBAR - ABBRUCH
echo.
echo ABBRUCH - Server nicht erreichbar, naechster Vorgang wird gestartet.
echo.
echo VORGANG 02:
echo    Zum Abschluss wird das Programm "Easy2Sync" gestartet.  
echo    ...in Bearbeitung...
ping 127.0.0.1 -n 5 >nul
%str%="C:\Program Files (x86)\Easy2Sync for Outlook\E2S4Outlook.exe"  
call %str%
Exit

:Vorhanden
::HEUTIGES BACKUP AUF SERVER BEREITS VORHANDEN - ABBRUCH
echo.
echo ABBRUCH - Backup auf dem Server vorhanden, naechster Vorgang wird gestartet.
echo.
echo VORGANG 03:
echo    Zum Abschluss wird das Programm "Easy2Sync" gestartet.  
echo    ...in Bearbeitung...
ping 127.0.0.1 -n 5 >nul
%str%="C:\Program Files (x86)\Easy2Sync for Outlook\E2S4Outlook.exe"  
call %str%
Exit
Mitglied: 122990
122990 Dec 30, 2015 updated at 23:35:47 (UTC)
Goto Top
Ich sehe den Fehler in diesen wiederholten Zeilen:
%str%="C:\Program Files (x86)\Easy2Sync for Outlook\E2S4Outlook.exe" 
call %str%

Wenn mit Variable dann so
set "str=C:\Program Files (x86)\Easy2Sync for Outlook\E2S4Outlook.exe"  
start "" /wait "%str%"  

p.s. Variablen sind nicht dazu da, das man Ihnen x mal den selben Wert zuweist, das reicht einmal.