donlino
Goto Top

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 face-smile

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

Content-Key: 152265

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

Ausgedruckt am: 28.03.2024 um 22:03 Uhr

Mitglied: 57263
57263 03.10.2010 um 20:25:19 Uhr
Goto Top
warum dann nicht nur xcopy R3181_39?\* Ziel /s?
Mitglied: bastla
bastla 03.10.2010 um 20:27:12 Uhr
Goto Top
Hallo DonLino und willkommen im Forum!

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
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 "echo" in der Zeile 11; wenn's gut aussieht, einfach diese "echo" weg- (und dadurch den Batch machen) lassen ...

Grüße
bastla
Mitglied: pieh-ejdsch
pieh-ejdsch 03.10.2010 um 20:33:48 Uhr
Goto Top
moin DonLino,

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
Mitglied: DonLino
DonLino 03.10.2010 um 21:00:05 Uhr
Goto Top
hi bastla,

danke!

Ich habe mich mal an deinem Vorschlag versucht. Leider bekonmme ich den Fehler, dass er die Datei nicht finden kann.

Kann es sein, dass das Script versucht die Ordner mit dem Namen R3181 direkt unter Test zu finden? Denn unter dem Testverzeichnis befinden sich ja noch die Unterordner PC1, PC2, PC3 etc. Erst danach folgend die Imageordner mit dem Namen R3181_*.*.

@pieh-ejdsch:

Danke für den Vorschlag. Jedoch bekomme ich auch dort die Meldung, dass er die Datei nicht finden konnte.

Gruß,
DonLino ;)
Mitglied: bastla
bastla 03.10.2010 um 21:06:15 Uhr
Goto Top
Hallo DonLino!
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 mit
dir /s /b /ad "D:\Daten\Test\R3181_*.*"
nachstellen ...

Grüße
bastla
Mitglied: DonLino
DonLino 03.10.2010 um 21:20:56 Uhr
Goto Top
Hallo bastla,

nun hat es geklappt ;)

Es lag an einem "*".

Das Script sieht dann nun so aus:

@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

Vielen Dank für die Hilfe und noch einen schönen Abend ;)

Gruß,
DonLino