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

25808
bobobobo

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

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

17
Попробуйте это - http://www.pcworld.com/article/2105149/gather-s Similar-files-from-multiple-folders-and-copy-them-in-one-simple-step.html CrakC 9 лет назад 0

2 ответа на вопрос

30
Joey

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

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

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

Оно работает! Не могли бы вы объяснить, для чего предназначен `% f`? bobobobo 14 лет назад 0
Это переменная цикла. Joey 14 лет назад 0
Это не сработало для меня, я получил что-то, что эффект `f 'был неожиданным в это время`. Изменение`% f` на `%% f` сработало. Однако я запустил это в командном файле: * Если вы используете команду FOR в командной строке, а не в пакетной программе, используйте только один знак процента:% G вместо %% G. * http://ss64.com/nt/for.html ta.speot.is 9 лет назад 2
Хм, да. Это ожидается и именно так, как вы цитировали. Откуда у меня твоя путаница? Joey 9 лет назад 1
Есть пара специальных переменных, которые вы, вероятно, хотите избежать при их назначении, например, в этом случае Джоуи установил обозначение переменной * f * для `% f`, что должно быть хорошо. Самый простой способ убедиться, что это безопасно - использовать заглавные буквы. `%% d` _might_ вызывает некоторые проблемы, но` %% D` будет в порядке. Просто убедитесь, что вы используете разные переменные для каждого вложенного цикла for. = kayleeFrye_onDeck 7 лет назад 0
@kayleeFrye_onDeck: Насколько я знаю, специальных переменных нет. Единственное, что приходит на ум, это то, что люди, незнакомые с `for ', могут запутаться в двух разных` d` в таких вещах, как `% ~ dd`. Документация `for` предлагает использовать заглавные буквы для переменных, чтобы избежать путаницы, но я думаю, что подстановки по-прежнему четко различимы от имени переменной. Joey 7 лет назад 1
Честно говоря, я не удосужился попытаться создать угловые дела, чтобы сломать его. Но да, это, вероятно, только для устранения путаницы. В общем, я предпочитаю даже не использовать буквы для расширения пакетных параметров, например `d`,` n`, `x`,` f`, `p`,` s`, `a`,` t` и `z`, даже в верхнем регистре. Мне также нравится использовать только верхний регистр, потому что это облегчает обнаружение использования расширения пакетного параметра, по крайней мере для меня. kayleeFrye_onDeck 7 лет назад 0
0
David Spillett

Если у вас установлен 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 15 лет назад 0