315 Aufrufe
Gefragt in Skripte(PHP,ASP,Perl...) von
Guten Abend zusammen,

ich habe mich den ganzen Sonntag lange damit beschäftigt doch bekomme es einfach nicht selbst hin. *heul*

Ich hätte gerne ein kleines *.bat / *.cmd Skript wo ich meinen Source sowie Destination Ordner angebe aus welchem die Ordner hergenommen und kopiert abgelegt werden sollen welche sich in einer Liste befinden.

Beispiel:

Source: C:\Users\Admin\Desktop\Projekte

--> In diesem Projekte Ordner befinden sich die ganzen Projekte z.B. Projekt 1, Projekt 2, Projekt 3, Projekt 4 etc.

Textdatei: C:\Users\Admin\Desktop\Auswahl.txt

--> Hier drinnen stehen untereinander die Namen der zu kopierenden Projekte z.B. Projekt 1, Projekt 4 welche sich im Source Pfad befinden.

Destination: D:\Backup Kundenprojekte\Kunde A

--> Hier her sollen die beiden Ordner (Projekt 1 sowie Projekt 4) inkl. sämtlichem Inhalt und ggf. Unterordnern kopiert werden.

Vielen Dank im Voraus an jeden der mir hier helfen kann. Sollte das o.g. nicht zu bewerkstelligen sein hätte ich auch nichts gegen ein kleines Programm wo man Quelle und Ziel sowie zu kopierende Ordner festlegt. :)

Mit freundlichen Grüßen

Dieter

17 Antworten

0 Punkte
Beantwortet von computerschrat Profi (29.8k Punkte)
Hallo Dieter,

versuch mal diese Zeile in einer Batch:

FOR /f %%N in (Auswahl.txt) DO copy C:\Users\Admin\Desktop\Projekte\%%N D:\Backup Kundenprojekte\Kunde A

Im File Auswahl.txt steht die Liste der zu kopierenden Projkekte. Die wird Zeile für Zeile gelesen. Dann wird der Pfad ergänzt und über Copy vom Quellverzeichnis zum Zielverzeichnis kopiert.

Wenn die Datei mit Liste der Projekte in einem anderen Verzeichnis steht, muss der Pfad in der Batch mit angegeben werden.

Zum Test solltest du erst mal anstelle des Copy-Befehls nur ein Echo einsetzen, dann wird im Fall eines Fehlers nicht gleich alles wild kopiert :-)

Gruß computerschrat
0 Punkte
Beantwortet von
Hallo computerschrat,

Vielen Dank für deinen Einsatz sowie deine Rückantwort.

Szenario:

Quelle: C:\Users\Admin\Desktop\Projekte A

--> Dort drinnen liegen Ordner Projekt 1, Projekt 2, Projekt 3

Ziel: C:\Users\Admin\Desktop\Projekte B

Auswahl.txt im o.g. Quelle Ordner wo untereinander Projekt 1 und Projekt 2 steht.

Batch:

FOR /f %%N in (Auswahl.txt) DO copy C:\Users\Admin\Desktop\Projekte A\%%N C:\Users\Admin\Desktop\Projekte B
pause

Ergebnis:

C:\Users\Admin\Desktop\Projekte A>FOR /F %N in (Auswahl.txt) DO copy C:\Users\Admin\Desktop\Projekte A\%N C:\Users\Admin\Desktop\Projekte B

C:\Users\Admin\Desktop\Projekte A>copy C:\Users\Admin\Desktop\Projekte A\Projekt C:\Users\Admin\Desktop\Projekte B
Das System kann die angegebene Datei nicht finden.

C:\Users\Admin\Desktop\Projekte A>copy C:\Users\Admin\Desktop\Projekte A\Projekt C:\Users\Admin\Desktop\Projekte B
Das System kann die angegebene Datei nicht finden.

C:\Users\Admin\Desktop\Projekte A>pause
Drücken Sie eine beliebige Taste . . .

Wenn ich jetzt die Batch auf "" abändere da Leerzeichen im Text sieht sie folgendermaßen aus:

FOR /f %%N in (Auswahl.txt) DO copy "C:\Users\Admin\Desktop\Projekte A\%%N" "C:\Users\Admin\Desktop\Projekte B"
pause

In der Auswahl.txt habe ich jetzt untereinander "Projekt 1" sowie "Projekt 2" stehen.

Ergebnis:

C:\Users\Admin\Desktop\Projekte A>FOR /F %N in (Auswahl.txt) DO copy "C:\Users\Admin\Desktop\Projekte A\%N" "C:\Users\Admin\Desktop\Projekte B"

C:\Users\Admin\Desktop\Projekte A>copy "C:\Users\Admin\Desktop\Projekte A\"Projekt" "C:\Users\Admin\Desktop\Projekte B"
C:\Users\Admin\Desktop\Projekte A\Projekt C:\Users\Admin\Desktop\Projekte
Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch.
        0 Datei(en) kopiert.

C:\Users\Admin\Desktop\Projekte A>copy "C:\Users\Admin\Desktop\Projekte A\"Projekt" "C:\Users\Admin\Desktop\Projekte B"
C:\Users\Admin\Desktop\Projekte A\Projekt C:\Users\Admin\Desktop\Projekte
Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch.
        0 Datei(en) kopiert.

C:\Users\Admin\Desktop\Projekte A>pause
Drücken Sie eine beliebige Taste . . .

Vielen Dank im Voraus für Rückantwort

LG Dieter
0 Punkte
Beantwortet von computerschrat Profi (29.8k Punkte)
Hallo Dieter,

die Leerzeichen im Pfadnamen sind ein Problem. Nimm aus der auswahl.txt die "" raus und setz den Pfad im Copy-Kommando in "":

FOR /f %%N in (Auswahl.txt) DO copy "C:\Users\Admin\Desktop\Projekte A\%%N" "C:\Users\Admin\Desktop\Projekte B"

und in Auswahl.txt stehen  nur die Projektnamen

Projekt A

Projekt B

...

Gruß computerschrat
0 Punkte
Beantwortet von
Hallo computerschrat,

Vielen Dank für deine Antwort.

Anbei das Ergebnis. Es ist leider nicht kopiert worden. Die "" in der Auswahl.txt sind entfernt.

C:\Users\Admin\Desktop\Projekte A>FOR /F %N in (Auswahl.txt) DO copy "C:\Users\Admin\Desktop\Projekte A\%N" "C:\Users\Admin\Desktop\Projekte B"

C:\Users\Admin\Desktop\Projekte A>copy "C:\Users\Admin\Desktop\Projekte A\Projekt" "C:\Users\Admin\Desktop\Projekte B"
Das System kann die angegebene Datei nicht finden.

C:\Users\Admin\Desktop\Projekte A>copy "C:\Users\Admin\Desktop\Projekte A\Projekt" "C:\Users\Admin\Desktop\Projekte B"
Das System kann die angegebene Datei nicht finden.

C:\Users\Admin\Desktop\Projekte A>pause
Drücken Sie eine beliebige Taste . . .

LG

Dieter
0 Punkte
Beantwortet von computerschrat Profi (29.8k Punkte)
Hallo Dieter,

das Problem ist auch hier wieder das Leerzeichen. Beim Lesen der Namen aus der Datei Auswahl.txt wird nur bis zum Leerzeichen gelesen, damit fehlt die folgende Ziffer. und es wird versucht, ein nicht existierendes Verzeichnis zu kopieren.

Das kannst du ändern durch:

FOR /f "usebackq delims=" %%N in (Auswahl.txt) DO copy "C:\Users\Admin\Desktop\Projekte A\%%N" "C:\Users\Admin\Desktop\Projekte B"

Gruß computerschrat
0 Punkte
Beantwortet von
Hallo computerschrat,

jetzt ist schon mal mehr passiert als zuvor. :)

Allerdings legt er mir jetzt erstens keinen Ordner mehr an aus der Auswahl.txt aus welcher er die Daten kopiert und zweitens geht er auf Unterordner etc. nicht ein. Ziel wäre das er mir die Ordner in der Auswahl.txt 1:1 so auf den neuen Pfad kopiert.

Ich hoffe du konntest mir folgen, auch wenn ich mich etwas doof ausdrücke. :)

LG

Dieter
0 Punkte
Beantwortet von computerschrat Profi (29.8k Punkte)
Hallo Dieter,

dann kommen wir der Sache näher. Dann benutzt anstelle von copy den Befehl xcopy mit Parameter /s  /e. Der kopiert auch Unterverzeichnisse. Also:

FOR /f "usebackq delims=" %%N in (Auswahl.txt) DO xcopy /s /e "C:\Users\Admin\Desktop\Projekte A\%%N" "C:\Users\Admin\Desktop\Projekte B"

Gruß computerschrat
0 Punkte
Beantwortet von
Hallo computerschrat,

wir sind dem ganzen wiederrum ein Stückchen näher gekommen und somit schon fast am Ziel.

Jetzt wird der gesamte Inhalt aus dem Quelle Ordner in der Auswahl.txt zwar in den Ziel Ordner kopiert, jedoch ohne den Ordner zu erstellen aus welcher er die Daten aus der Auswahl.txt kopiert hat. Wenn du es jetzt noch irgendwie hinbekommst den Ordner zu erstellen in dem dann die Daten abgelegt werden bin ich glücklich. :)

Ich Danke dir tierisch im voraus und wünsche dir noch einen schönen Abend.

LG Dieter

Anbei noch der Output aus der Batch:

C:\Users\Admin\Desktop\Projekte A>FOR /F "usebackq delims=" %N in (Auswahl.txt) DO xcopy /s /e "C:\Users\Admin\Desktop\Projekte A\%N" "C:\Users\Admin\Desktop\Projekte B"

C:\Users\Admin\Desktop\Projekte A>xcopy /s /e "C:\Users\Admin\Desktop\Projekte A\Projekt 1" "C:\Users\Admin\Desktop\Projekte B"
C:\Users\Admin\Desktop\Projekte A\Projekt 1\Pro 1.mkv
C:\Users\Admin\Desktop\Projekte A\Projekt 1\Pro 1\Pro 11.mkv
2 Datei(en) kopiert

C:\Users\Admin\Desktop\Projekte A>xcopy /s /e "C:\Users\Admin\Desktop\Projekte A\Projekt 2" "C:\Users\Admin\Desktop\Projekte B"
C:\Users\Admin\Desktop\Projekte A\Projekt 2\Pro 2.mkv
C:\Users\Admin\Desktop\Projekte A\Projekt 2\Pro 2\Pro 22.mkv
2 Datei(en) kopiert

C:\Users\Admin\Desktop\Projekte A>pause
Drücken Sie eine beliebige Taste . . .
0 Punkte
Beantwortet von computerschrat Profi (29.8k Punkte)

Hallo Dieter,

ich muss mich da auch selbst rantasten. Die Zeiten, in denen ich DOS-Kommandos benutzt habe sind schon ein paar Jahre her. Aber eine Idee habe ich noch:

Gib den Ordnernamen aus der Datei Auswahl.txt auch im Ziel von xcopy an:

C:\Users\Admin\Desktop\Projekte A>FOR /F "usebackq delims=" %N in (Auswahl.txt) DO xcopy /s /e "C:\Users\Admin\Desktop\Projekte A\%N" "C:\Users\Admin\Desktop\Projekte B\%N"

Jetzt sollte es dann klappen smiley

Gruß computerschrat

0 Punkte
Beantwortet von
Hallo computerschrat,

das ist doch alles kein Problem. Ich bin ja froh wenn sich jemand die Mühe macht (mehrmals) und gewillt ist einem zu helfen. :) Soeben getestet, kopiert hat er leider gar nichts. In meinem Quelle Ordner wurde eine Datei "FOR" angelegt aber ohne Inhalt.

Anbei noch der Output aus der DOS Box:

C:\Users\Admin\Desktop\Projekte A>C:\Users\Admin\Desktop\Projekte A /F "usebackq delims=" \Users\Admin\Desktop\Projekte A\\Users\Admin\Desktop\Projekte B\N" 1>FOR
Der Befehl "C:\Users\Admin\Desktop\Projekte" ist entweder falsch geschrieben oder
konnte nicht gefunden werden.

C:\Users\Admin\Desktop\Projekte A>pause
Drücken Sie eine beliebige Taste . . .

Lieben Dank und viele Grüße

Dieter
...