Pliki xcopy do jednego katalogu

21

Chciałbym użyć xcopy na komputerze z systemem Windows, aby wyciągnąć wszystkie pliki z rozszerzeniem .png do jednego katalogu.

Próbowałem xcopy C:\folder\*.png /s C:\png\, ale zachowuje podkatalogi wewnątrz folderu \ (na przykład w C: \ png, jest C: \ png \ a \ b \ c \ img.png), czego nie chcę. Chcę po prostu wszystkie .png wewnątrz C: \ png bez zachowania struktury katalogów, która była w folderze C: \.

Bobobobo
źródło
Spróbuj tego- pcworld.com/article/2105149/…
Swastik Padhi

Odpowiedzi:

39

Można to zrobić za pomocą starego, dobrego for:

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

Nic fajnego.

Joey
źródło
To działa! Chcesz wyjaśnić, po co to %fjest?
bobobobo
To zmienna pętli.
Joey,
3
To nie działało dla mnie, mam coś do efektu f" was unexpected at this time. Przejście %fdo %%fpracy. Jednak uruchomiłem to w pliku wsadowym: jeśli używasz polecenia FOR w wierszu polecenia, a nie w programie wsadowym, użyj tylko jednego znaku procentowego:% G zamiast %% G. ss64.com/nt/for.html
ta.speot.is
1
Uhm, tak. Jest to oczekiwane i dokładnie tak, jak zacytowałeś. Skąd pochodzę twoje zamieszanie?
Joey,
1
@kayleeFrye_onDeck: O ile mi wiadomo, nie ma żadnych specjalnych zmiennych. Jedyne, co przychodzi mi na myśl, to to, że ludzie, którzy nie są zaznajomieni, formogą się pomylić co do dwóch różnych drzeczy %~dd. forDokumentacja sugeruje użycie wielkich liter dla zmiennych, aby uniknąć nieporozumień, ale podstawienia są nadal wyraźnie odróżniają się od nazwy zmiennej, myślę.
Joey,
1

Jeśli masz zainstalowany cygwin, będzie to zadanie do znalezienia:

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

(choć będzie to miało problem, jeśli którakolwiek z nazw plików będzie miała spacje - znajdziesz jednak wariant findpolecenia, który zadziała we wszystkich okolicznościach)

Jeśli korzystasz z systemu Vista, 2003 lub 2008, to mniej elastyczne, ale wciąż przydatne „pliki” to Twój przyjaciel. Coś jak:

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

Uwaga: nie testowałem żadnego z powyższych poleceń, ale teoretycznie powinny one działać ...

David Spillett
źródło
+1 właśnie zweryfikował, że polecenie FORFILES działa. Uruchomiłem go dwa razy i skopiowałem monit o drugim wyjściu / wyjściu, więc zakładam, że po prostu nadpisuje, jeśli znajdzie duplikaty.
hyperslug