zunaras
Goto Top

Robocopy soll bestimmte Ordner synchronisieren

Hallo,

Robocopy soll bestimmte Ordner auf einer NAS, beginnend mit "Backup", mit dem Ziel synchronisieren.
Bisher habe ich das immer für jeden Ordner einzeln gelöst. Aber es kommen immer wieder Backup-Ordner hinzu oder werden entfernt, sodass man die BAT ständig editieren muss.
Lässt sich das vereinfachen?

Hier der bisherige Code
robocopy.exe "\\nas\Backup1"   "D:\Kopie\Backup1"   /MIR  /TEE  /R:0 /W:0 /XD "@Recycle"  /ETA /NP /MT:1  

Quelle
\\nas\Backup1
\\nas\backup2
usw

Ziel
d:\Kopie\Backup1
d:\Kopie\backup2
usw.

Mit diesem Code als Vorlage habe ich experimentiert
Hier kommt der Fehler "Der Netzwerkordner wurde nicht gefunden"
for /f "tokens=*" %%a in ('dir \\nas\Backup*./ad /b') do robocopy %%a "D:\Kopie\%%a" /MIR  usw.....  
oder
for /f "tokens=*" %%a in ('dir \\nas\Backup*./ad /b') do robocopy \\nas\%%a "D:\Kopie\%%a" /MIR  usw.....  

Viele Grüße

Content-ID: 386368

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

Ausgedruckt am: 19.11.2024 um 13:11 Uhr

137084
137084 13.09.2018 aktualisiert um 16:17:43 Uhr
Goto Top
@echo off
for /d %%a in ("\\nas\Freigabe\Backup*") do robocopy "%%~a" "D:\Kopie\%%~nxa" /MIR /R:0 /W:0 /XD "@Recycle" /ETA /NP /MT:1  
Zunaras
Zunaras 13.09.2018 um 15:52:56 Uhr
Goto Top
Hi!

wenn ich das ausführe, passiert gar nichts. Nicht mal ein Hinweis.
137084
137084 13.09.2018 aktualisiert um 16:04:56 Uhr
Goto Top
Geht hier einwandfrei! Der Code gehört in eine Batch, zum ausprobieren auf der Konsole musst du die doppelten Prozentzeichen durch einzelne ersetzen!

Hier lesen
Tutorial zur FOR-Schleife
Zunaras
Zunaras 13.09.2018 um 16:06:25 Uhr
Goto Top
Hab ich so gemacht.
Wenn ich den Code als Batch ausführe, fällt auf, das am Anfang
for / %a in ("\\nas\Backup*") ........
steht

Sollte da nicht
for /d %a in ("\\nas\Backup*") ........
stehen?
137084
137084 13.09.2018 aktualisiert um 16:10:25 Uhr
Goto Top
Zitat von @Zunaras:

Hab ich so gemacht.
Wenn ich den Code als Batch ausführe, fällt auf, das am Anfang
for / %a in ("\\nas\Backup*") ........
steht

Sollte da nicht
for /d %a in ("\\nas\Backup*") ........
stehen?
Du hast das Encoding deiner Batch versaut, außerdem fehlen dir die doppelten Prozentzeichen wenn es in einer Batch steht, habe ich doch oben geschrieben, nur wenn es direkt in eine Konsole reingetippelt wird sind es einfache Prozentzeichen!
Wie gesagt Code funktioniert einwandfrei, es liegt auf deiner Seite sorry.
emeriks
emeriks 13.09.2018 aktualisiert um 16:16:29 Uhr
Goto Top
Hi,
das funktioniert bei mir auch nicht. Und es wäre mir auch neu, dass man Wildcards beim Benennen von Freigaben verwenden könnte.
Beachte:
\\nas\BackupX
ist eine Freigabe, kein Verzeichnis.

E.
137084
137084 13.09.2018 aktualisiert um 16:18:41 Uhr
Goto Top
Naja das er das durch seine Freigabe und anschließenden Pfad ersetzt setze ich mal voraus, das waren ja nur Platzhalter.

Damit 's nicht confused habe ich das ganze mal durch
"\\nas\Freigabe\Backup*"
ersetzt.
emeriks
emeriks 13.09.2018 um 16:18:21 Uhr
Goto Top
Naja das er das durch seine Freigabe und anschließenden Pfad ersetzt setze ich mal voraus, das waren ja nur Platzhalter.
Du hast nicht verstanden.
Man kann - meines Wissens - bei Freigabenamen keine Wildcards benutzen.
137084
137084 13.09.2018 aktualisiert um 16:21:36 Uhr
Goto Top
Zitat von @emeriks:

Naja das er das durch seine Freigabe und anschließenden Pfad ersetzt setze ich mal voraus, das waren ja nur Platzhalter.
Du hast nicht verstanden.
Man kann - meines Wissens - bei Freigabenamen keine Wildcards benutzen.
Das ist klar, aber er sagt doch das das Unterordner sind und keine einzelnen Freigaben.

Er muss also die Freigabe nehmen in der alle seine Backupordner liegen
Zunaras
Zunaras 13.09.2018 aktualisiert um 16:21:23 Uhr
Goto Top
Moment!
emeriks
emeriks 13.09.2018 um 16:19:59 Uhr
Goto Top
Wo sagt er das? Seine Aufgabenstellung ist
\\nas\Backup*
137084
137084 13.09.2018 aktualisiert um 16:21:52 Uhr
Goto Top
Dann hat er sich eben nicht eindeutig ausgedrückt. Nach seiner Laute sind es Ordner keine Freigaben und dafür ist der Code auch gedacht.

Warten wir's ab was er sagt.
emeriks
emeriks 13.09.2018 um 16:21:45 Uhr
Goto Top
Zitat von @137084:
Das ist klar, aber er sagt doch das das Unterordner sind und keine einzelnen Freigaben.

Er muss also die Freigabe nehmen in der alle Backupordner liegen
Wenn Du Deine Kommentare nun schon komplett änderst, dann kennzeichne das bitte auch so. Sonst weiß später niemand mehr, wer warum worauf geantwortet hat.
137084
137084 13.09.2018 um 16:22:29 Uhr
Goto Top
Wir waren nur zu schnell, das ist alles.
emeriks
emeriks 13.09.2018 um 16:23:56 Uhr
Goto Top
Zitat von @137084:
Wir waren nur zu schnell, das ist alles.
Wir?
Zunaras
Zunaras 13.09.2018 um 16:24:18 Uhr
Goto Top
Darf ich wieder?

Ich hab mich bestimmt falsch ausgedrückt. Sorry!!!

Es ist ein auf der NAS eingerichteter Freigabeordner.
137084
137084 13.09.2018 aktualisiert um 16:26:06 Uhr
Goto Top
D.h. jeder Backupordner ist eine eigene Freigabe oder wie jetze??
Oder sind die Backupordner einzelne Ordner innerhalb einer Freigabe?
emeriks
emeriks 13.09.2018 um 16:26:27 Uhr
Goto Top
Zitat von @137084:

D.h. jeder Backupordner ist eine eigene Freigabe oder wie jetze??
Ja. Schreibt er doch schon im Eigangstext!
emeriks
emeriks 13.09.2018 aktualisiert um 16:29:36 Uhr
Goto Top
Wenn die Freigaben tatsächlich "Backup1", "Backup2", "Backup3" usw. lauten, dann könntest Du das ganz einfach hochzählen.

for %n in (1 2 3 4 5 6 7 8 9) do robocopy.exe "\\nas\Backup%n" "D:\Kopie\Backup%n" /MIR /TEE /R:0 /W:0 /XD "@Recycle" /ETA /NP /MT:1  
Zunaras
Zunaras 13.09.2018 um 16:28:48 Uhr
Goto Top
Jeder dieser Ordner ist eine eigene Freigabe.
137084
137084 13.09.2018 aktualisiert um 16:44:10 Uhr
Goto Top
Zitat von @Zunaras:

Jeder dieser Ordner ist eine eigene Freigabe.
OK in dem Fall kannst du folgendes machen
for /f "tokens=1" %%a in ('net view \\NAS ^| findstr /i "^Backup.*"') do robocopy "\\NAS\%%a" "D:\Kopie\%%a" /MIR /TEE /R:0 /W:0 /XD "@Recycle" /ETA /NP /MT:1  
Zunaras
Zunaras 13.09.2018 um 17:54:51 Uhr
Goto Top
Vielen Dank euch beiden!

Die Lösung von ElMano gefällt mir ganz gut, da ich hier auch ohne die Zahlen arbeiten kann.

Ich hätte dafür auch schon ein weiteres Einsatzgebiet. Allerdings haben diese Ordner Leerzeichen im Namen. Der Pfad wird nach dem ersten Wort abgeschnitten.
137084
137084 13.09.2018 aktualisiert um 18:14:31 Uhr
Goto Top
Zitat von @Zunaras:

Ich hätte dafür auch schon ein weiteres Einsatzgebiet. Allerdings haben diese Ordner Leerzeichen im Namen. Der Pfad wird nach dem ersten Wort abgeschnitten.
Das wäre kein Hindernis, lässt sich auch an solche Bedürfnisse anpassen.
Zunaras
Zunaras 14.09.2018 um 09:10:50 Uhr
Goto Top
Zitat von @137084:
Das wäre kein Hindernis, lässt sich auch an solche Bedürfnisse anpassen.

Ich experimentier ja gerne und suche selbst nach Lösungen aber nun zieh ich mir seit Stunden das "Tutorial zur FOR-Schleife" rein und hab nach Beispielen ähnlich meinem Fall gesucht. Stichwort: delims, findstr, tokens oder auch usebackq
Aber was ich auch mache, der Pfad mit Leerzeichen wird nicht übernommen. Wenn doch, dann steht da noch viel, viel mehr als Ergebnis und/oder es kommt ein Fehler.
Dürfte ich ich vielleicht noch mal um Deine Hilfe bitten?
emeriks
emeriks 14.09.2018 um 09:22:59 Uhr
Goto Top
Was hindert Dich daran, diese Ordner - extra für den Backup - mit einer zweiten Freigabe freizugeben, z.B. versteckte Freigaben mit "$" am Ende und "Backup" am Anfang und ohne Leerzeichen im Namen?
137084
137084 14.09.2018 aktualisiert um 09:30:24 Uhr
Goto Top
for /f "delims=" %%a in ('powershell -Executionpolicy ByPass -NoProfile -Command "net view \\NAS | ?{$_ -match '\b(Platte|Disk)\b'} | %%{($_ -split '\s{2,}')}"') do echo Tu was mit der Freigabe: '%%a'  
Zunaras
Zunaras 14.09.2018 um 11:32:38 Uhr
Goto Top
Zitat von @emeriks:

Was hindert Dich daran, diese Ordner - extra für den Backup - mit einer zweiten Freigabe freizugeben, z.B. versteckte Freigaben mit "$" am Ende und "Backup" am Anfang und ohne Leerzeichen im Namen?

Ein guter Tipp. Danke!


Zitat von @137084:

> for /f "delims=" %%a in ('powershell -Executionpolicy ByPass -NoProfile -Command "net view \\NAS | ?{$_ -match '\b(Platte|Disk)\b'} | %%{($_ -split '\s{2,}')}"') do echo Tu was mit der Freigabe: '%%a'   

Vielen Dank! Ich werde noch ein wenig tüfteln müssen, um bestimmte Ordner an Robocopy weiterzugeben.
137084
Lösung 137084 14.09.2018 aktualisiert um 11:47:33 Uhr
Goto Top
Zitat von @Zunaras:
Vielen Dank! Ich werde noch ein wenig tüfteln müssen, um bestimmte Ordner an Robocopy weiterzugeben.
Einfach per Where-Object im Powershell-Abschnitt ausfiltern oder per nachgeschaltetem findstr
Per where-Object
for /f "delims=" %%a in ('powershell -Executionpolicy ByPass -NoProfile -Command "net view \\NAS | ?{$_ -match '\b(Platte|Disk)\b'} | %%{($_ -split '\s{2,}')} | ?{$_ -like '*Dich such ich*'}"') do echo Tu was mit der Freigabe: '%%a'  
per Findstr
for /f "delims=" %%a in ('powershell -Executionpolicy ByPass -NoProfile -Command "net view \\NAS | ?{$_ -match '\b(Platte|Disk)\b'} | %%{($_ -split '\s{2,}')}" ^| findstr /ic:"Such ich"') do echo Tu was mit der Freigabe: '%%a'  

Oder besser gleich komplett auf die Powershell umsteigen um diesen Mischmasch zu umgehen.

Wenns das dann war bitte noch den Haken dran.


-Achtung nachträgliche Fehlerkorrekturen-
Zunaras
Zunaras 14.09.2018 um 12:02:22 Uhr
Goto Top
Zitat von @137084:
Wenns das dann war bitte noch den Haken dran.

Vielen lieben Dank !!