xcopy Dateien in ein einzelnes Verzeichnis

21

Ich möchte xcopy auf einem Windows-Computer verwenden, um alle Dateien mit der Erweiterung .png in ein einziges Verzeichnis zu ziehen.

Ich habe es versucht xcopy C:\folder\*.png /s C:\png\, aber es hält die Unterverzeichnisse in \ Ordner (zum Beispiel in C: \ png, dort ist C: \ png \ a \ b \ c \ img.png), was ich nicht will. Ich möchte einfach alle .png in C: \ png, ohne die Verzeichnisstruktur beizubehalten, die sich in C: \ folder befand.

Bobobobo
quelle
Versuchen Sie dies- pcworld.com/article/2105149/…
Swastik Padhi

Antworten:

39

Dies kann mit guten alten getan werden for:

for /r C:\Folder %f in (*.png) do @copy "%f" C:\png

Nichts Außergewöhnliches.

Joey
quelle
Es klappt! Möchtest %fdu erklären, wofür das ist?
Bobobobo
Es ist die Schleifenvariable.
Joey
3
Das hat bei mir nicht funktioniert, ich habe etwas in der Art von f" was unexpected at this time. Wechsel %fzu %%fgearbeitet. Ich habe dies jedoch in einer Batch-Datei ausgeführt: Wenn Sie den Befehl FOR in der Befehlszeile und nicht in einem Batch-Programm verwenden, verwenden Sie nur ein Prozentzeichen:% G anstelle von %% G. ss64.com/nt/for.html
ta.speot.is
1
Ähm, ja. Das ist zu erwarten und genau so, wie Sie es angegeben haben. Woher würde deine Verwirrung kommen?
Joey
1
@kayleeFrye_onDeck: Soweit ich weiß, gibt es keine speziellen Variablen. Das Einzige, was mir in den Sinn kommt, ist, dass Menschen, die nicht mit diesen Dingen vertraut sind, formöglicherweise über die beiden Unterschiede din Dingen wie verwirrt werden %~dd. In der forDokumentation wird empfohlen, für Variablen Großbuchstaben zu verwenden, um Verwechslungen zu vermeiden, aber Substitutionen lassen sich meiner Meinung nach immer noch deutlich vom Variablennamen unterscheiden.
Joey
1

Wenn Sie Cygwin installiert haben, ist dies ein Job zum Finden:

cp `find /cygdrive/c/folder/* -name '*png'` /cygdrive/c/png/

(Dies kann jedoch zu Problemen führen, wenn einer der Dateinamen Leerzeichen enthält. Es gibt jedoch eine Variante eines findBefehls, der unter allen Umständen funktioniert.)

Wenn Sie mit Vista, 2003 oder 2008 arbeiten, ist das weniger flexible, aber dennoch nützliche "forfiles" Ihr Freund. So etwas wie:

FORFILES /P c:\folder\ /M *.png /S /C "cmd /c copy @file c:\png\"

Hinweis: Ich habe keinen der obigen Befehle getestet, aber theoretisch sollten sie funktionieren ...

David Spillett
quelle
+1 hat gerade überprüft, ob der Befehl FORFILES funktioniert. Ich habe es zweimal ausgeführt und das zweite Mal ohne Eingabeaufforderung kopiert. Daher gehe ich davon aus, dass es nur überschreibt, wenn Duplikate gefunden werden.
Hyperslug