получать папки в одну строку - PullRequest
0 голосов
/ 18 марта 2012

Я хочу использовать пакетный скрипт для циклического перемещения по папкам и подпапкам и возврата всех папок, содержащих файлы XML, в одну строку. (Мне нужно иметь возможность отправить это как параметр)

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

MasterFolder1> Подпапка1> file1.xml - file2.xml ... другие файлы
Подпапка2> file1.xml - file2.xml ... другие файлы
... другие подпапки

MasterFolder2> Подпапка1> file1.xml - file2.xml ... другие файлы
Подпапка2> file1.xml - file2.xml ... другие файлы
... другие подпапки

и т. Д.

То, что я уже смог построить, - это пакетные данные, которые будут проходить по всем папкам, и будут заботиться только о тех, которые имеют файлы XML. Это выглядит следующим образом:

@echo off & setLocal enableDELAYedexpansion

set catdir=%CD%\catalog\%
cd %catdir%

FOR /f %%G in ('dir /ad/s/b') DO (
if exist %%G\*.xml ( 

for /f "tokens=1-6 delims=\/" %%i in ("%%G") do (
set model=%%m   REM 'model' is the master folder name
set locale=%%n  REM 'locale' is the sub folder name

echo %%m - %%n 

)
)
) 

pause

Что дает мне вывод типа

Model1 - DE
Model1 - FR
Model1 - ES
Model2 - DE
Model2 - FI
Model2 - DK

и т. Д.

Теперь, что я хотел бы получить, это что-то вроде этого:

Model1 - DE; FR; ES
Модель2 - DE; FI; DK

и т. Д., Чтобы я мог отправить свою основную папку как одну переменную, а все подпапки основной папки как сгруппированную переменную в приложение.

Надеюсь, я немного ясен, я абсолютный новичок в пакетных файлах.

1 Ответ

1 голос
/ 18 марта 2012

Эта проблема может быть решена с помощью этого процесса:

1- For each one of the top-level folders:
2-   Initialize result with top-level folder name
3-   For each one of the subfolders below it
4-      If subfolder contains *.xml files: gather its name in result
5-   Show the result

Это командный файл:

@echo off
setlocal EnableDelayedExpansion
set catdir=%CD%\catalog\
cd %catdir%
for /D %%m in (*) do (
   set "result=%%m - "
   pushd "%%m"
   for /D %%n in (*) do (
      if exist "%%n\*.xml" (
         set "result=!result!%%n;"
      )
   )
   popd
   if not "!result!" == "%%m - " (
      echo !result:~0,-1!
   )
)

Часть :~0,-1! в последней команде echo удаляет точку с запятойимя последней подпапки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...