Пакетные файлы Windows: отображение всех файлов в каталоге с циклом - PullRequest
2 голосов
/ 17 апреля 2011

У меня есть программа ABC, которая в настоящее время принимает один файл и выгружает n файлов в папку, имя которой совпадает с именем файла без расширения.

Количество созданных файлов является произвольным. Я хочу взять все эти выходные файлы и переместить их в другой каталог. Это означает, что когда я передам 10 файлов в программу ABC, я получу выходные данные в одном каталоге, а не в 10 отдельных каталогах.

Для этого я буду использовать вложенный цикл for. Внешний цикл будет отправлять каждый аргумент для обработки программой ABC, а внутренний цикл будет перемещать все полученные файлы в мою папку по выбору.

У меня закончена часть внешнего цикла, но я не уверен, как получить список файлов в папке.

Я сначала попытался повторить их

for /D %%Y in (dir %%~nX) do
  echo %%Y
)

где %% ~ nX - это имя только что созданной папки из программы ABC, но все, что он делает, это выводит "dir" и имя папки, а не оценивает (dir %% ~ nX) перед тем, как попытаться выполнить цикл над ним.

Кроме того, каталог будет включать в себя родительский каталог и текущий каталог, который я не хочу, если я когда-нибудь заставлю его работать. Как мне от них избавиться, и можно ли оценить команду перед ее зацикливанием?

Ответы [ 2 ]

3 голосов
/ 17 апреля 2011

Если вы посмотрите на помощь, которую вы получите при запуске FOR /?, вы увидите, что вам нужно:

for /D %%Y in (%%~nX\*) do

или

for /F %%Y in ('dir /b %%~nX') do
1 голос
/ 17 апреля 2011

Попробуйте эту ссылку -

http://rosettacode.org/wiki/Walk_a_directory/Recursively#Batch_File

Вместо эха используйте копию.

Редактировать: Здесь вы идете

FOR /R <source-directory> %F IN (*.xml) DO COPY "%F" <destination-directory>

Это скопируетвсе * .xml файлы из исходного каталога в конечный каталог рекурсивно и выравнивают структуру каталогов.

...