simon-mcp
Goto Top

Inhalt von mehreren Unterordner kopieren und löschen mit Batch

Kurz gesagt:
Ich habe mehrere Unterordner deren Inahlt ich per Batch-Script an 2 neuen Speicherplätzen ablegen will.

Hallo,

ich benötige ein Batch-File das mir aus einem Hauptordner genannt: "Sprachen" den kompletten Inhalt der Unterordner an 2 neuen Pfaden ablegt/verschiebt. Die Dateien am alten Pfad können gelsöcht oder wie gesagt verschoben werden.
Beispiel:
:: Hauptordner ::
- DE (in diesen Unterordnern befinden sich PDF-Dateien)
- ES
- FR

Hier sollte das Script also nun hin gehen und damit anfangen, den Inhalt des Ordners "DE" an 2 neuen Pfaden a + b hin kopieren. Danach die Dateien im Ordner DE löschen und mit Ordner "ES" fortfahren usw...

Ist so etwas überhaupt möglich ?

cu
Crus

Content-ID: 70208

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

Ausgedruckt am: 22.11.2024 um 13:11 Uhr

Netzheimer
Netzheimer 05.10.2007 um 09:57:31 Uhr
Goto Top
Zeichen zwischen /* und */ nicht mit tippen

@echo off
xcopy Quelle Ziel1 /E /K /I /H /F
xcopy Quelle Ziel2 /E /K /I /H /F
attrib -r -a -s -h Quelle /S


/* Löschen geht dann manuell am schnellsten denke ich */


/*
für Quelle den Quellort angeben
für Ziel1 den 1. Zielort
für Ziel2 den 2. Zielort
Option /E für Unterverzeichnisse mitkopieren
Option /K für Attribute mitkopieren
Option /I für Verzeichnis erstellen, wenn es nicht existiert
Option /H für versteckte Dateien mitkopieren
Option /F für Anzeiger der zu kopierenden Dateinamen
*/
Simon-MCP
Simon-MCP 05.10.2007 um 10:06:45 Uhr
Goto Top
Hallo,

vielen Dank erstmal für deine schnelle Antwort, doch ich glaub das ist nicht ganz so wie ich es brauche.

Ich möchte jeweils nur den Inhalt der Unterordner DE, ES, FR an die beiden neuen Speicherplätze abspeichern und nicht die kompletten Ordner.
Die Unterordner DE, ES, FR usw. enthalten PDF Dateien. Diese PDF Dateien sollen an Pfad A und B abgelegt werden.
Netzheimer
Netzheimer 05.10.2007 um 10:43:17 Uhr
Goto Top
cd Hauptverzeichnis/Unterverzeichnis1
copy *.pdf /V ZielordnerA

cd\
cd Hauptverzeichnis/Unterverzeichnis2

usw.

In den Leerraum dazwischen kann man del *.pdf einfügen um die Files zu löschen.
Das Attribut /V vergleicht, ob die Dateien richtig geschrieben worden sind.
miniversum
miniversum 05.10.2007 um 11:33:28 Uhr
Goto Top
Versuchs mal damit:
set "quelle=C:\Hauptverzeichnis"  
set "ziel1=C:\ziel1"  
set "ziel2=C:\ziel2"  
set "filefilter=*.*"  

FOR /F "delims=" %%d in (dir /B /aD %quelle%) do (  
ECHO copy /Y "%quelle%\%%d\%filefilter%" "%ziel1%"    
ECHO copy /Y "%quelle%\%%d\%filefilter%" "%ziel2%"    
ECHO rd /S /Q "%quelle%\%%d"  
)
So sollte es gehen. Pfade müssen halt noch angepasst werden.
Es wird erstmal nur angezeigt was gemacht wird. Soll wirklich kopiert und gelöscht werden müssen die grossgeschriebenen ECHOs entfernt werden.

miniversum
Simon-MCP
Simon-MCP 05.10.2007 um 11:35:32 Uhr
Goto Top
Vielen Dank für deine Hilfe.

Im Prinzip funktioniert dies. Dafür danke ich Dir auch schon mal.
Nur eins ist etwas umständlich, man muss für jedes Unterverzeinis eine Routine in der Batch-Datei anlegen.
Wenn in Zukunft ein weiteres Unterverzeichnis dazu kommen sollte, muss dieses von Hand wieder in der Batch Datei hinzugefügt werden.

Kann man das evtl. auch automatisieren ?

cu
Crus
Simon-MCP
Simon-MCP 05.10.2007 um 11:41:11 Uhr
Goto Top
Hallo,

das sieht schon eher aus nach dem was ich suche. Danke schon mal für deine Mühe.

Ich habe das Script folgendermaßen abgeändert:
set "quelle=C:\Test_Orig"
set "ziel1=C:\Test_Dupli"
set "ziel2=C:\Test_Dupli2"
set "filefilter=*.txt"

FOR /F "delims=" %%d in (dir /B /aD %quelle%) do (
copy /Y "%quelle%\%%d\%filefilter%" "%ziel1%"
copy /Y "%quelle%\%%d\%filefilter%" "%ziel2%"
ECHO rd /S /Q "%quelle%\%%d"
)

Leider bekomme ich aber folgende Meldung:
Die Datei "dir" kann nicht gefunden werden.

muss ich das dir auch noch durch das Hauptverzeichniss ersetzen ?

cu
Crus
bastla
bastla 05.10.2007 um 12:00:27 Uhr
Goto Top
Hallo crus-online#de!

Ersetze die Zeile
FOR /F "delims=" %%d in (dir /B /aD %quelle%) do (  
durch
FOR /F "delims=" %%d in ('dir /B /aD "%quelle%"') do (  

Grüße
bastla
Simon-MCP
Simon-MCP 05.10.2007 um 12:09:21 Uhr
Goto Top
Hallo,

perfekt, vielen lieben Dank. Das funktioniert soweit nun super.

Nur noch ein kleines Problem:
Mit diesem Befehl rd /S /Q "%quelle%\%%d wird nach dem kopieren der einzelnen Dateien das komplette Unterverzeichnis gelöscht.
Ist es auch möglich nur die kopierte Datei (*.txt) zu löschen und das Unterverzeichniss bestehen zu lassen.

cu
Crus
miniversum
miniversum 05.10.2007 um 12:31:34 Uhr
Goto Top
Ersetze mal:
rd /S /Q "%quelle%\%%d"
durch
del "%quelle%\%%d\%filefilter%"

miniversum
Biber
Biber 06.10.2007 um 23:40:40 Uhr
Goto Top
Moin crus-online#de,

ich würde die Anforderung direkt vom CMD-Prompt abfackeln ohne so viele Variablen und Heckmeck.

>for /r "C:\PDFRoot\" %i in (*.pdf) do @for %j in ("copy "%i" "Ziel1"" "move %i "ziel2"") do @ECHO %~j  
... und dabei
  • statt "C:\PDFRoot\" Deinen Hauptordner oberhalb "ES", "DE". "PT" etc. einsetzen
  • statt "Ziel1" und "Ziel2" deine Zielordner (die vorher schon existieren, denke ich)
  • das letzte "@ECHO" ist nur zum gefahrlosen Testen - zum Ausführen einfach weglassen.

Gruß
Biber
Simon-MCP
Simon-MCP 07.10.2007 um 16:41:17 Uhr
Goto Top
Hallo Biber,

danke für deine Mühe.
Trotz allem das es eigentlich schon läuft, habe ich deine Idee auch mal versucht einzusetzen. Doch leider scheint in dem Code etwas nicht zu stimmen.

Wenn ich den Code so ausführe wie er oben steht (ohne das letzte "@ECHO") erhalte ich die folgende Meldung:
Die folgende Verwendung des Pfadoperators zur Ersetzung eines Batchparameters
ist ungültig: %~j


Enterne ich dann das "~" for dem "j" erhalte ich folgende Meldung:
C:\Dokumente und Einstellungen\"User-Profil">for /r "C:\PDFRoot\" j in ("copy "i "zie
l2"") do @echo "%i" "Ziel1"" "move %i "ziel2"") do @echo %~j
C:\Dokumente und Einstellungen\Crusader>C:\copy.bat
"j" ist syntaktisch an dieser Stelle nicht verarbeitbar.

Ich möchte dich damit aber auch nicht unnötig belästigen, da ich ja bereits ein funktionierendes Script erhalten habe.

Vielen Dank aber noch mal und noch einen schönen Sonntag.

cu
Crus
bastla
bastla 07.10.2007 um 17:16:07 Uhr
Goto Top
Hallo crus-online#de!

Biber's Variante war für die Verwendung an der Kommandozeile, nicht in einer Batchdatei, gedacht - in Batch musst Du jeweils die %-Zeichen verdoppeln, also etwa %%~j schreiben.

Grüße
bastla