Как ограничить глубину DIR / S? - PullRequest
0 голосов
/ 26 марта 2019

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

В данный момент мой код выглядит следующим образом.

set ProjectNo=12345
set ProjectLocation=E:\Projects\123 BSI\45 Bukit \G Model 12345\02 Models
set location=E:\Scripts

dir /S/B "%ProjectLocation%\\..\\%ProjectNo%-*-MDL-??-???.dwg" > %location%\%ProjectNo%-ML-%DATE%.txt

Список длинный, но частичный вывод выглядит следующим образом:

E:\Projects\123 BSI\04 Bukit\G Model 12345\02 Models\GE\12345-30-MDL-GE-003.dwg
E:\Projects\123 BSI\04 Bukit\G Model 12345\02 Models\ME\12345-25-MDL-ME-018.dwg
E:\Projects\123 BSI\04 Bukit\G Model 12345\02 Models\ME\12345-30-MDL-ME-017.dwg
E:\Projects\123 BSI\04 Bukit\G Model 12345\02 Models\ME\12345-25-MDL-ME-018\Details\12345-25-MDL-ME-018.dwg
E:\Projects\123 BSI\04 Bukit\G Model 12345\02 Models\ME\_Superseded\12345-120-MDL-ME-018.dwg
E:\Projects\123 BSI\04 Bukit\G Model 12345\02 Models\PP\12345-25-MDL-PP-001.dwg
E:\Projects\123 BSI\04 Bukit\G Model 12345\02 Models\ST\12345-01-MDL-ST-001.dwg
E:\Projects\123 BSI\04 Bukit\G Model 12345\02 Models\ST\12345-01-MDL-ST-002.dwg

Любая идея - перечислить только один уровень глубиной от "E:\Projects\123 BSI\04 Bukit\G Model 12345\02 Models\"

Ожидаемый результат показан ниже:

E:\Projects\123 BSI\04 Bukit\G Model 12345\02 Models\GE\12345-30-MDL-GG-003.dwg
E:\Projects\123 BSI\04 Bukit\G Model 12345\02 Models\ME\12345-25-MDL-KK-018.dwg
E:\Projects\123 BSI\04 Bukit\G Model 12345\02 Models\ME\12345-30-MDL-MM-017.dwg
E:\Projects\123 BSI\04 Bukit\G Model 12345\02 Models\PP\12345-25-MDL-PP-001.dwg
E:\Projects\123 BSI\04 Bukit\G Model 12345\02 Models\ST\12345-01-MDL-SS-001.dwg
E:\Projects\123 BSI\04 Bukit\G Model 12345\02 Models\ST\12345-01-MDL-CC-002.dwg

Есть идеи, как этого добиться?

1 Ответ

1 голос
/ 26 марта 2019

Вы можете использовать команду FOR /D для вывода списка всех каталогов в корневом каталоге вашего исходного каталога. Затем используйте другую команду FOR, чтобы вывести список нужных файлов в единый подкаталог источника.

@echo off
set "ProjectNo=12345"
set "ProjectLocation=E:\Projects\123 BSI\45 Bukit\G Model 12345\02 Models"
set "location=E:\Scripts"

(FOR /D %%G IN ("%ProjectLocation%\*") DO (
    FOR %%H IN ("%%~G\%ProjectNo%-*-MDL-??-???.dwg") DO echo %%H
)
)>"%location%\%ProjectNo%-ML-%DATE%.txt"

Все изменения кода, которые я сделал, - это лучшие практики, которых вы должны придерживаться. Цитирование не является обязательным, но требуется при наличии пробелов в путях.

В этом сценарии с перенаправлением выходной файл открывается только один раз для записи. Если вы перенаправили команду FOR, она будет открывать и закрывать файл при каждом выполнении команды ECHO.

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