1

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

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

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

2 ответа2

3

Ответ

Предполагая, что вы имеете в виду целевой каталог (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 довольно длинная. ;)

1

Решение PowerShell:

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .