Batch Problem Kopieren bzw. Prüfen von bestimmten Verzeichnissen
Hallo zusammen,
zurzeit bin ich dabei ein kleines Batchscript zu schreiben was mir bestimmte Unterverzeichnisse auf ein Sicherungslaufwerk kopieren soll. Nach dem Kopieren soll die Ordner vom Quellverzeichnis wieder gelöscht werden, damit die NAS Box ein bisschen mehr Platz hat. Problem steht näher unten
Hallo zusammen,
zurzeit bin ich dabei ein kleines Batchscript zu schreiben was mir bestimmte Unterverzeichnisse auf ein Sicherungslaufwerk kopieren soll. Nach dem Kopieren soll die Ordner vom Quellverzeichnis wieder gelöscht werden, damit die NAS Box ein bisschen mehr Platz hat.
Ich habe ein Laufwerk D: wo es ein Rootverzeichnis mit einigen Unterverzeichnissen gibt.
In jedem dieser Unterverzeichnisse sind wieder Unterverzeichnisse mit verschiedenen Namen z.B. R3181_392 od. R3181_393 (Name von Imagedateien).
Sieht so aus:
D:\Daten\Test\PC_1\R3181_392\DateiXY
D:\Daten\Test\PC_1\R3181_393\DateiAB
D:\Daten\Test\PC_1\TestTest\TestDatei
D:\Daten\Test\PC_1\BlubBlub\Blabla
D:\Daten\Test\PC_2\R3181_392\DateiXY
D:\Daten\Test\PC_2\R3181_393\DateiAB
D:\Daten\Test\PC_2\TestTest\TestDatei
D:\Daten\Test\PC_2\BlubBlub\Blabla
D:\Daten\Test\PC_3\TestTest\TestDatei
D:\Daten\Test\PC_3\R3181_392\DateiXY
D:\Daten\Test\PC_3\R3181_393\DateiAB
D:\Daten\Test\PC_3\TestTest\TestDatei
Mein Script sieht bisher so aus (es kopiert auf ein Sicherungsverzeichnis und löscht anschließend vom Quellverzeichnis um Platz zu machen)
Nun möchte ich aber vor dem Kopieren alle Unterverzeichnisse in D:\Test\*.* durchlaufen und nur nach den Namen R3181 suchen. Die anderen Unterverzeichnisse mit einem anderen Namen sollen dabei nicht berücksichtigt werden. Wenn das Script alle Unterverzeichnisse mit den Namen R3181 gefunden hat, sollen nur diese auf das Sicherungslaufwerk kopiert werden.
Leider sind meine Batchkenntnisse nicht gerade herausragend und wollte hier um Rat fragen, ob mir vielleicht jemand einen Tip geben kann.
Über eine Antwort würde ich mich freuen.
PS: Hier und bei Google habe ich schon geschaut, aber nicht wirklich was hilfreiches gefunden.
Danke und viele Grüße,
DonLino
zurzeit bin ich dabei ein kleines Batchscript zu schreiben was mir bestimmte Unterverzeichnisse auf ein Sicherungslaufwerk kopieren soll. Nach dem Kopieren soll die Ordner vom Quellverzeichnis wieder gelöscht werden, damit die NAS Box ein bisschen mehr Platz hat. Problem steht näher unten
Hallo zusammen,
zurzeit bin ich dabei ein kleines Batchscript zu schreiben was mir bestimmte Unterverzeichnisse auf ein Sicherungslaufwerk kopieren soll. Nach dem Kopieren soll die Ordner vom Quellverzeichnis wieder gelöscht werden, damit die NAS Box ein bisschen mehr Platz hat.
Ich habe ein Laufwerk D: wo es ein Rootverzeichnis mit einigen Unterverzeichnissen gibt.
In jedem dieser Unterverzeichnisse sind wieder Unterverzeichnisse mit verschiedenen Namen z.B. R3181_392 od. R3181_393 (Name von Imagedateien).
Sieht so aus:
D:\Daten\Test\PC_1\R3181_392\DateiXY
D:\Daten\Test\PC_1\R3181_393\DateiAB
D:\Daten\Test\PC_1\TestTest\TestDatei
D:\Daten\Test\PC_1\BlubBlub\Blabla
D:\Daten\Test\PC_2\R3181_392\DateiXY
D:\Daten\Test\PC_2\R3181_393\DateiAB
D:\Daten\Test\PC_2\TestTest\TestDatei
D:\Daten\Test\PC_2\BlubBlub\Blabla
D:\Daten\Test\PC_3\TestTest\TestDatei
D:\Daten\Test\PC_3\R3181_392\DateiXY
D:\Daten\Test\PC_3\R3181_393\DateiAB
D:\Daten\Test\PC_3\TestTest\TestDatei
Mein Script sieht bisher so aus (es kopiert auf ein Sicherungsverzeichnis und löscht anschließend vom Quellverzeichnis um Platz zu machen)
@echo off
xcopy D:\Daten\Test\* E:\Sicherung\Images\* /D /E /Y /I
for /d %%i in ("D:\Daten\Test\*") do @rd /s /q "%%i"
@del /f /q "D:\Daten\Test\*"
if errorlevel 1 goto error
:error
echo Das Kopieren und Löschen war nicht erfolgreich!
pause
Nun möchte ich aber vor dem Kopieren alle Unterverzeichnisse in D:\Test\*.* durchlaufen und nur nach den Namen R3181 suchen. Die anderen Unterverzeichnisse mit einem anderen Namen sollen dabei nicht berücksichtigt werden. Wenn das Script alle Unterverzeichnisse mit den Namen R3181 gefunden hat, sollen nur diese auf das Sicherungslaufwerk kopiert werden.
Leider sind meine Batchkenntnisse nicht gerade herausragend und wollte hier um Rat fragen, ob mir vielleicht jemand einen Tip geben kann.
Über eine Antwort würde ich mich freuen.
PS: Hier und bei Google habe ich schon geschaut, aber nicht wirklich was hilfreiches gefunden.
Danke und viele Grüße,
DonLino
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 152265
Url: https://administrator.de/contentid/152265
Ausgedruckt am: 08.11.2024 um 07:11 Uhr
6 Kommentare
Neuester Kommentar
warum dann nicht nur xcopy R3181_39?\* Ziel /s?
Hallo DonLino und willkommen im Forum!
Du könntest es etwa so versuchen:
Damit Du einigermaßen entspannt testen kannst, werden die Befehle für das Kopieren und das Löschen (wird nur ausgeführt, wenn das Kopieren ohne Fehler beendet wurde) der Verzeichnisse nur ausgegeben - dafür sorgen die beiden "
Grüße
bastla
Du könntest es etwa so versuchen:
@echo off & setlocal
set "Quelle=D:\Daten\Test"
set "Ziel=E:\Sicherung\Images"
for /f "delims=" %%i in ('dir /s /b /ad "%Quelle%\R3181_*.*"') do set "Pfad=%%i" & call :ProcessDir "%%i"
goto :eof
:ProcessDir
set "ZielPfad=%Ziel%%Pfad%\"
call set "ZielPfad=%%ZielPfad:%Quelle%=%%"
echo xcopy /dey %1 "%ZielPfad%" && echo rd /s /q %1
goto :eof
echo
" in der Zeile 11; wenn's gut aussieht, einfach diese "echo
" weg- (und dadurch den Batch machen) lassen ...Grüße
bastla
moin DonLino,
als erstes ins Verzeichnis wechseln und den Rest in einer FOR-Schleife abarbeiten
Ungetestet erst Testdaten nehmen!
[Edit] nagut etwas zu spät [/Edit]
Gruß Phil
als erstes ins Verzeichnis wechseln und den Rest in einer FOR-Schleife abarbeiten
Ungetestet erst Testdaten nehmen!
@echo off
pushd D:\Daten\Test
for /f "Tokens=*" %%i in ('dir /s /b /ad "R3181*"') do (xcopy "%%i" "E:\Sicherung\Images\%%i" /D /E /Y /I&&@rd /s /q "%%i"||echo Das Kopieren und löschen war nicht erfolgreich!)
popD
[Edit] nagut etwas zu spät [/Edit]
Gruß Phil
Hallo DonLino!
nachstellen ...
Grüße
bastla
Kann es sein, dass das Script versucht die Ordner mit dem Namen R3181 direkt unter Test zu finden?
Nein - es wird ab dem als %Quelle% angegebenen Ordner nach allen passenden Unterordnern gesucht - kannst Du direkt an der Kommandozeile mitdir /s /b /ad "D:\Daten\Test\R3181_*.*"
Grüße
bastla