Как извлечь файлы из дерева с помощью CMD

291
tuskiomi

Допустим, у меня есть следующее дерево:

├───animals │ │ hippopotamus.txt │ │ lion.txt │ │ │ └───dog │ poodle.txt │ terrier.txt │ └───food ├───fruit │ apple.txt │ orange.txt │ └───vegetables borcolli.txt carrot.txt corn.txt 

Какую команду я бы использовал для создания каталога, содержащего все файлы .txt, но без вложенных папок, по сути, «выравнивая» дерево.

1
Какая операционная система? Какую «командную строку» вы используете? что ты уже испробовал? Тег «командная строка» обозначает способ работы, и одного этого недостаточно, чтобы сообщить нам, что вы используете. Mokubai 7 лет назад 0
@Mokubai CMD, как и в названии, относится к windows CMD.exe. tuskiomi 7 лет назад 0
Это не достаточно ясно. В следующий раз добавьте соответствующий тег ОС. slhck 7 лет назад 0
@slhck> Командная строка, также известная как cmd.exe или cmd (после имени исполняемого файла), является интерпретатором командной строки в Windows. От: https://en.wikipedia.org/wiki/Cmd.exe tuskiomi 7 лет назад 0
@tuskiomi Теги позволяют пользователям быстро находить интересующие их вопросы. Добавление тега для конкретной ОС улучшает видимость вашего вопроса тем, кто отвечает, и будущим пользователям, которые задают тот же вопрос. Спасибо за участие в Super User. Twisty Impersonator 7 лет назад 1
@tuskiomi Специально по этой причине есть тег `cmd.exe`. DavidPostill 7 лет назад 0

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

3
Damian T.

Ответ

Предполагая, что вы имеете в виду целевой каталог (C: \ Target) и все файлы .txt находятся в каталоге C: \ Tree, следующая команда получит список всех файлов .txt и скопирует их в нужный файл. место назначения:

for /F "delims=" %a in ('dir /s /b "C:\Tree\*.txt" ') do (copy "%a" "C:\Target") 

Я поставил двойные кавычки вокруг параметров, которые могут содержать пробелы.

объяснение

for /F 

Выполняет разбор текста для цикла. По умолчанию токены будут разбиты на пробелы на переменные% a,% b,% c и т. Д. Поскольку мы не хотим такого поведения, я указал:

"delims=" 

Что означает отсутствие разделителей. % a будет переменной, содержащей каждую строку текста из вывода нашей команды. Команда, которую я использовал, была:

dir /s /b "C:\Tree\*.txt" 

Выполняется распечатка каталога всех файлов, соответствующих * .txt в папке C: \ Tree. Флаг / s выполняется рекурсивно, ища внутри всех подкаталогов / подпапок. Флаг / b выводит листинг в «голом» формате, который в основном просто перечисляет файл и путь. Вывод выглядит так:

C:\Tree\animals\hippopotamus.txt C:\Tree\animals\lion.txt C:\Tree\animals\dog\poodle.txt C:\Tree\animals\dog\terrier.txt C:\Tree\food\fruit\apple.txt C:\Tree\food\fruit\orange.txt C:\Tree\food\vegetables\borcolli.txt C:\Tree\food\vegetables\carrot.txt C:\Tree\food\vegetables\corn.txt 

И конечно:

copy "%a" "C:\Target" 

Копирует файл, обозначенный переменной% a, в каталог C: \ Target. Цикл for в основном выполняет следующие команды:

copy "C:\Tree\animals\hippopotamus.txt" "C:\Target" copy "C:\Tree\animals\lion.txt" "C:\Target" copy "C:\Tree\animals\dog\poodle.txt" "C:\Target" copy "C:\Tree\animals\dog\terrier.txt" "C:\Target" copy "C:\Tree\food\fruit\apple.txt" "C:\Target" copy "C:\Tree\food\fruit\orange.txt" "C:\Target" copy "C:\Tree\food\vegetables\borcolli.txt" "C:\Target" copy "C:\Tree\food\vegetables\carrot.txt" "C:\Target" copy "C:\Tree\food\vegetables\corn.txt" "C:\Target" 

Для получения дополнительной информации о параметрах DIR или циклах FOR в командной строке Windows (CMD) вы можете ввести help dirили help for. Осторожно, страница справки цикла FOR довольно длинная. ;)

Пожалуйста, дайте мне знать, если это не совсем отвечает на ваш вопрос. Если это так, пожалуйста, примите это как ответ. :) Damian T. 7 лет назад 0
Это определенно правильный ответ. Хотя я просто добавлю это, это одна из тех вещей, которые мне нравятся в PowerShell, потому что она кажется "чище" ... пример: get-childitem -recurse -include * .txt | copy-item -destination C: \ Target BrianC 7 лет назад 0
1
SimonS

Решение PowerShell:

mkdir C:\AllTxt ; gci C:\Install *.txt -Recurse | copy-item -Destination C:\AllTxt -Force 
  • mkdirсоздает новый каталог, как C:\AllTxt
  • gciвозвращает все txt-файлы в C:\install(верхний каталог вашей древовидной структуры) рекурсивно
  • copy-item скопирует файлы в место назначения