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

GOTO label automatisch hochzaehlen

Frage Entwicklung Batch & Shell

Mitglied: rw2000

rw2000 (Level 1) - Jetzt verbinden

05.02.2010 um 14:14 Uhr, 4435 Aufrufe, 7 Kommentare

hallo leute,

ich bin neu hier in diesem klasse forum, das mir schon oft weiter geholfen hat. jetzt stehe ich mit einem problem aber ziemlich auf dem schlauch.

ich habe folgendes vor:

ich starte mehrere robocopy-jobs gleichzeitig und warte, bis alle beendet sind (sprich, bis alle robocopy.exe-prozesse weg sind), dann gehts weiter
mit den naechsten jobs, warten, naechste jobs usw.

das klappt soweit auch prima mit diesem code:



REM Hier werden mehrere RoboCopy's gestartet, den genauen Aufruf spar ich mir hier mal

START /B ROBOCOPY.EXE ...
START /B ROBOCOPY.EXE ...
START /B ROBOCOPY.EXE ...
START /B ROBOCOPY.EXE ...

REM Der folgende Loop soll auf die Beendigung der RoboCopy's warten ...

:ROBOCOPY_LOOP_1
TASKLIST | FINDSTR /I ROBOCOPY.EXE > NUL
IF %ERRORLEVEL% == 0 GOTO ROBOCOPY_LOOP_1 > NUL

REM Hier werden mehrere RoboCopy's gestartet, den genauen Aufruf spar ich mir hier mal

START /B ROBOCOPY.EXE ...
START /B ROBOCOPY.EXE ...
START /B ROBOCOPY.EXE ...
START /B ROBOCOPY.EXE ...

REM Der folgende Loop soll auf die Beendigung der RoboCopy's warten ...

:ROBOCOPY_LOOP_2
TASKLIST | FINDSTR /I ROBOCOPY.EXE > NUL
IF %ERRORLEVEL% == 0 GOTO ROBOCOPY_LOOP_2 > NUL

REM Hier werden mehrere RoboCopy's gestartet, den genauen Aufruf spar ich mir hier mal

START /B ROBOCOPY.EXE ...
START /B ROBOCOPY.EXE ...
START /B ROBOCOPY.EXE ...
START /B ROBOCOPY.EXE ...

REM Der folgende Loop soll auf die Beendigung der RoboCopy's warten ...

:ROBOCOPY_LOOP_3
TASKLIST | FINDSTR /I ROBOCOPY.EXE > NUL
IF %ERRORLEVEL% == 0 GOTO ROBOCOPY_LOOP_3 > NUL

REM usw. ...


wie man sehen kann, habe ich die labels fuer die goto-befehle hier 'fest verdrahtet', was zwar wie gesagt funktioniert, aber etwas unelegant ist.

deshalb habe ich versucht, den zaehler, den ich an dem sprungziel mit dran habe, automatisch hochzuzaehlen:



REM Hier werden mehrere RoboCopy's gestartet, den genauen Aufruf spar ich mir hier mal

START /B ROBOCOPY.EXE ...
START /B ROBOCOPY.EXE ...
START /B ROBOCOPY.EXE ...
START /B ROBOCOPY.EXE ...

REM Der folgende Loop soll auf die Beendigung der RoboCopy's warten ...

IF "%NUMBER%" == "" SET NUMBER=1
:ROBOCOPY_LOOP_%NUMBER%
TASKLIST | FINDSTR /I ROBOCOPY.EXE > NUL
IF %ERRORLEVEL% == 0 GOTO ROBOCOPY_LOOP_%NUMBER% > NUL
SET /A NUMBER=%NUMBER%+1

REM Hier werden mehrere RoboCopy's gestartet, den genauen Aufruf spar ich mir hier mal

START /B ROBOCOPY.EXE ...
START /B ROBOCOPY.EXE ...
START /B ROBOCOPY.EXE ...
START /B ROBOCOPY.EXE ...

REM Der folgende Loop soll auf die Beendigung der RoboCopy's warten ...

IF "%NUMBER%" == "" SET NUMBER=1
:ROBOCOPY_LOOP_%NUMBER%
TASKLIST | FINDSTR /I ROBOCOPY.EXE > NUL
IF %ERRORLEVEL% == 0 GOTO ROBOCOPY_LOOP_%NUMBER% > NUL
SET /A NUMBER=%NUMBER%+1

REM Hier werden mehrere RoboCopy's gestartet, den genauen Aufruf spar ich mir hier mal

START /B ROBOCOPY.EXE ...
START /B ROBOCOPY.EXE ...
START /B ROBOCOPY.EXE ...
START /B ROBOCOPY.EXE ...

REM Der folgende Loop soll auf die Beendigung der RoboCopy's warten ...

IF "%NUMBER%" == "" SET NUMBER=1
:ROBOCOPY_LOOP_%NUMBER%
TASKLIST | FINDSTR /I ROBOCOPY.EXE > NUL
IF %ERRORLEVEL% == 0 GOTO ROBOCOPY_LOOP_%NUMBER% > NUL
SET /A NUMBER=%NUMBER%+1

REM usw. ...



ABER: irgendwie erkennt das script das sprungziel nicht mehr, es kommt schon nach der ersten schleife die fehlermeldung:


The system cannot find the batch label specified - ROBOCOPY_LOOP_1



so, hab ich hier nur noch ein kleines syntax-problem, auf das ich einfach nicht komme oder womoeglich doch einen groesseren denkfehler?


wer kann mir helfen?


vielen dank im voraus ...


so long

rainer
Mitglied: 5t8d1e
05.02.2010 um 17:45 Uhr
Hallo,

meines Erachten nach ist deine Denkweise etwas schräg. Wie soll der cmd-Interpreter eine Sprungmarke finden wenn diese nicht vorhanden ist?

The system cannot find the batch label specified - ROBOCOPY_LOOP_1 sagt ja alles aus oder?

Grüße Torsten
Bitte warten ..
Mitglied: miniversum
05.02.2010 um 17:51 Uhr
Ich würde das anders lösen. Die Schleife fürs warten kannst du ja in eine unterprozedur packen die um immer wieder übe rein call aufrufst:
01.
START /B ROBOCOPY.EXE ... 
02.
START /B ROBOCOPY.EXE ... 
03.
START /B ROBOCOPY.EXE ... 
04.
START /B ROBOCOPY.EXE ... 
05.
 
06.
call:warten 
07.
 
08.
START /B ROBOCOPY.EXE ... 
09.
START /B ROBOCOPY.EXE ... 
10.
START /B ROBOCOPY.EXE ... 
11.
START /B ROBOCOPY.EXE ... 
12.
 
13.
call:warten 
14.
 
15.
START /B ROBOCOPY.EXE ... 
16.
START /B ROBOCOPY.EXE ... 
17.
START /B ROBOCOPY.EXE ... 
18.
START /B ROBOCOPY.EXE ... 
19.
 
20.
goto:eof 
21.
 
22.
:warten 
23.
:ROBOCOPY_LOOP_1 
24.
TASKLIST | FINDSTR /I ROBOCOPY.EXE > NUL 
25.
IF %ERRORLEVEL% == 0 GOTO ROBOCOPY_LOOP_1 > NUL
Bitte warten ..
Mitglied: bastla
05.02.2010 um 18:14 Uhr
... wobei sich dann das Unterprogramm noch auf
01.
:warten 
02.
TASKLIST|FINDSTR /I ROBOCOPY.EXE>NUL && goto:warten 
03.
goto:eof
reduzieren ließe (und wenn danach nix mehr kommt, reichen die ersten beiden Zeilen ).

Auf jeden Fall hat miniversum die mE sinnvollste Variante gezeigt ...

Grüße
bastla
Bitte warten ..
Mitglied: laster
06.02.2010 um 13:32 Uhr
Hallo,

wenn Du schon mit start arbeitest, kannst Du doch die Option /WAIT nutzen?

vG LS
Bitte warten ..
Mitglied: bastla
06.02.2010 um 14:35 Uhr
... klingt sinnvoll - um den derzeitigen Ablauf nachzubilden, müsste allerdings abzuschätzen sein, welcher der parallel laufenden Vorgänge am längsten dauert (um nur diesen als letzten Befehl des Blocks mit "/wait" aufzurufen) ...

Grüße
bastla
Bitte warten ..
Mitglied: Biber
06.02.2010 um 15:05 Uhr
... ich würde eher versuchen, die Anforderung konventionell zu lösen.

Wenn x Robocopy-"Threads" parallel gestartet werden sollen und der Batch-Ablauf erst weiterlaufen soll, wenn alle fertig sind..

Ja hey! Dann können doch alle Robocopy-Jobs jeweils ein "Robocopy_log.001"...bis "..007" schreiben und der Batch prüft,
ob "Robocopy_log.001" bis "..007" da sind.
Denn Protokoll-Dateien bei einem Kopier/Sicherungslauf will ich ja ohnehin haben.

[Um einen Einwand zu entkräften: Das Risiko, dass einer der Robocopy-Jobs derart in die Grütze geht, dass er keine Kraft mehr hat ein Log zu schreiben... das halte ich für zu vernachlässigen.]

Grüße
Biber

[Edit] Die Formulierung ob "Robocopy_log.001" bis "..007" da sind" sollte eigentlich noch etwas verfeinert werden.
Denn eine Log-Datei ist möglicherweise schon vorhanden, bevor Robocopy fertig (jedenfalls würde von mir geschriebenes Kopierprogramm auch nach jedem Teil-Erfolg etwas schreiben). Also sollte nicht nur mit IF EXIST geprüft werden, ob ein Log vorhanden ist, sondern mit Find/FindStr inhaltlich auf die Zeile "Summary"/Zusammenfassung oder whatever Robocopy so zum Schluss schreibt.
[/Edit]
Bitte warten ..
Mitglied: rw2000
08.02.2010 um 10:06 Uhr
hallo leute,

vielen dank fuer die zahlreichen antworten.

@ thorsten: die sprungmarke ist ja zu diesem zeitpunkt schon vorhanden, da ich sie ja mit IF "%NUMBER%" == "" SET NUMBER=1 setze. wird mir auch angezeigt wenn ich REM :ROBOCOPY_LOOP_%NUMBER% angebe.
trotzdem findet der batch sie nicht. womoeglich ist da eher die denkweise von microsoft schraeg. egal.

@ laster: start /wait bringt ja nix, weil ich mehrere gleichzeitig starten will und mit /wait wartet er ja zwangslaeufig, bis der vorgaenger beendet ist.

@ biber: logs will ich keine erzeugen, insofern scheidet das aus. threads ist eigentlich das stichwort, denn mit windows 7 kann robocopy multi-threads ausfuehren. dann koennt ich mir das ganze sparen. muss aber unter xp laufen.

@ miniversum und bastla: eure vorschlaege scheinen die loesung zu sein. dass ich mir im batch so eine art subroutinen basteln kann wusste ich bis jetzt nicht. man lernt nie aus.

so long

rainer
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
Microsoft Office
Registerkarte in Excel automatisch färben (10)

Frage von ralfkausk zum Thema Microsoft Office ...

Windows Server
Jnlp Endungen mit Java automatisch verknüpfen über GPO (10)

Frage von staybb zum Thema Windows Server ...

Batch & Shell
gelöst Batch Abfrage Vergleiche mit Variable goto (4)

Frage von Zunaras zum Thema Batch & Shell ...

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

Frage von xbast1x zum Thema Windows Server ...

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

Frage von Y3shix zum Thema Grafikkarten & Monitore ...

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

Frage von Motte990 zum Thema Microsoft Office ...