xcopy файлы в один каталог


21

Я хотел бы использовать xcopy на компьютере с Windows, чтобы вытащить все файлы с расширением .png в один каталог.

Я пытался xcopy C:\folder\*.png /s C:\png\, но он хранит подкаталоги внутри \ folder (например, в C: \ png, есть C: \ png \ a \ b \ c \ img.png), который мне не нужен. Я просто хочу, чтобы все .png внутри C: \ png без сохранения структуры каталогов, которая была в папке C: \.


Попробуйте это
Свастик Падхи

Ответы:


39

Это можно сделать с помощью старого доброго for:

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

Ничего фантастического.


Оно работает! Не хочешь объяснить, для чего %f?
Бобобобо

Это переменная цикла.
Джои

3
Это не сработало для меня, я получил что-то такое f" was unexpected at this time. Смена %fна %%fсработало. Однако я выполнял это в пакетном файле: если вы используете команду FOR в командной строке, а не в пакетной программе, используйте только один знак процента:% G вместо %% G. ss64.com/nt/for.html
ta.speot.is

1
Хм, да. Это ожидается и именно так, как вы цитировали. Откуда у меня твоя путаница?
Джои

1
@kayleeFrye_onDeck: Насколько я знаю, специальных переменных нет. Единственное, что приходит на ум, - это то, что незнакомые люди forмогут запутаться в двух разных dвещах %~dd. forДокументация предлагает использовать прописные буквы , для переменных , чтобы избежать путаницы, но замены до сих пор четко отличим от имени переменной, я думаю.
Джои

1

Если у вас установлен Cygwin, это будет работа для поиска:

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

(хотя это будет иметь проблемы, если в любом из имен файлов есть пробелы - вы найдете какой-то вариант findкоманды, который будет работать при любых обстоятельствах)

Если вы работаете в Vista, 2003 или 2008, то ваш друг - менее гибкий, но все же полезный «forfiles». Что-то вроде:

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

Примечание: я не проверял ни одну из вышеуказанных команд, но теоретически они должны работать ...


+1 только что проверил, что команда FORFILES работает. Я запустил его дважды, и он скопировал второй раз без приглашения, поэтому я предполагаю, что он просто перезаписывает, если находит дубликаты.
HyperSlug
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.