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
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"
oder
Viele Grüße
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.....
for /f "tokens=*" %%a in ('dir \\nas\Backup*./ad /b') do robocopy \\nas\%%a "D:\Kopie\%%a" /MIR usw.....
Viele Grüße
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 386368
Url: https://administrator.de/contentid/386368
Ausgedruckt am: 19.11.2024 um 13:11 Uhr
29 Kommentare
Neuester Kommentar
@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
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
Hier lesen
Tutorial zur FOR-Schleife
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!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?
Wie gesagt Code funktioniert einwandfrei, es liegt auf deiner Seite sorry.
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.
Damit 's nicht confused habe ich das ganze mal durch
"\\nas\Freigabe\Backup*"
ersetzt.
Zitat von @emeriks:
Man kann - meines Wissens - bei Freigabenamen keine Wildcards benutzen.
Das ist klar, aber er sagt doch das das Unterordner sind und keine einzelnen Freigaben.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.
Er muss also die Freigabe nehmen in der alle seine Backupordner liegen
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.
Warten wir's ab was er sagt.
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.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
Wir waren nur zu schnell, das ist alles.
D.h. jeder Backupordner ist eine eigene Freigabe oder wie jetze??
Oder sind die Backupordner einzelne Ordner innerhalb einer Freigabe?
Oder sind die Backupordner einzelne Ordner innerhalb einer 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
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.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.
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'
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 findstrVielen Dank! Ich werde noch ein wenig tüfteln müssen, um bestimmte Ordner an Robocopy weiterzugeben.
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'
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-