Найти папку с помощью пакета
Я пытаюсь сделать сценарий, который поможет пройти большую библиотеку с большим количеством папок, имен и номеров. Номера частей разделены на 4 части XXX.XX.XX.XXXX. Для облегчения поиска папки библиотеки установлены следующим образом: (примеры имен) 100_Vegetal \ 01_Flower \ 01_Red \ 0001_Rose
Моя проблема заключается в названии папок, если бы папка называлась только "100", было бы легко пройти через нее. Вот код, который я использую, чтобы отделить номер детали и попытаться открыть папку.
set /p pnr="Please enter the PNR : "
echo %pnr%
echo %pnr:~0,3%
echo %pnr:~4,2%
echo %pnr:~7,2%
echo %pnr:~10,4%
explorer ".library\%pnr:~0,3%(*)"
Я хотел бы открыть папку, в которой есть первые 3 цифры номера детали. Не могли бы вы помочь мне с этим вопросом. Я пытался со звездой, но он открывает проводник...
Спасибо.
2 ответа
При условии, что числа из pnr уникальны в дереве папок, следующая партия откроет папку, соответствующую всем 4 числам, путем итерации с последовательным for /d loops
Будьте осторожны, мета-переменные различают верхний / нижний регистр,
поэтому PNR разделен на %%A..%%D
и найденные папки находятся в %%a..%%d
Пример дерева на моем ОЗУ A:
> tree
A:.
└───.library
└───100_Vegetal
└───01_Flower
└───01_Red
└───0001_Rose
:: Q:\Test\2018\10\26\SU_1370234.cmd
@Echo off
set "Base=A:\.library"
set /p pnr="Please enter the PNR : "
:: set pnr=100.01.01.0001
echo %pnr%
:: reset Level variables
for /l %%L in (1,1,4) do Set "Level%%L="
:: first split pnr, then dive into folders
for /f "tokens=1-4 delims=." %%A in ("%pnr%" ) Do (
for /d %%a in ("%Base%\%%A*") Do (Set Level1=%%a
for /d %%b in ("%%a\%%B*") Do (Set Level2=%%b
for /d %%c in ("%%b\%%C*") Do (Set Level3=%%c
for /d %%d in ("%%c\%%D*") Do (Set Level4=%%d
Explorer "%%d
)
)
)
)
)
:: set Level
Пример вывода:
> Q:\Test\2018\10\26\SU_1370234.cmd
Please enter the PNR :
100.01.01.0001
Level1=A:\.library\100_Vegetal
Level2=A:\.library\100_Vegetal\01_Flower
Level3=A:\.library\100_Vegetal\01_Flower\01_Red
Level4=A:\.library\100_Vegetal\01_Flower\01_Red\0001_Rose
Проводник открывается здесь, в A:\.library\100_Vegetal\01_Flower\01_Red\0001_Rose
Вы можете использовать команду dir с /S /B /AD
параметры в цикле for /f и делают его рекурсивным обходом исходной папки только для каталогов, а затем итерируют эти папки с набранными числами, используя подстановочный знак, который будет открыт в проводнике.
Пример скрипта
set /p pnr="Please enter the PNR : "
set pnr=%pnr:~0,3%
FOR /F "TOKENS=*" %%a IN ('DIR /S /B /AD ".library\%pnr%*"') DO explorer "%%~fa"
Дополнительные ресурсы
- Для / F
FOR /?
tokens=x,y,m-n - specifies which tokens from each line are to be passed to the for body for each iteration. This will cause additional variable names to be allocated. The m-n form is a range, specifying the mth through the nth tokens. If the last character in the tokens= string is an asterisk, then an additional variable is allocated and receives the remaining text on the line after the last token parsed.
- Dir