Найти папку с помощью пакета

565
Wyz

Я пытаюсь сделать сценарий, который поможет пройти большую библиотеку с большим количеством папок, имен и номеров. Номера частей разделены на 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 цифры номера детали. Не могли бы вы помочь мне с этим вопросом. Я пытался со звездой, но он открывает проводник ...

Спасибо.

0
Используйте `for / f" tokens = 1-4 delims =. " %% A in ("% pnr%") делает Echo %% A, %% B, %% C, %% D`, чтобы разделить pnr на четыре для мета-переменных %% A .. %% D LotPings 6 лет назад 1
Проводник не принимает подстановочные знаки в переданном имени каталога: вам нужно что-то вроде `for / d %% d в (" .library \% pnr: ~ 0,3% * ") do start / w explorer" %% d "`. AFH 6 лет назад 0

2 ответа на вопрос

1
Pimp Juice IT

Вы можете использовать команду 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
Спасибо за помощь. Wyz 6 лет назад 0
1
LotPings

При условии, что числа из 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

Большое спасибо, что так хорошо работает. Wyz 6 лет назад 0
Как я могу «спрятать» путь уровня? Wyz 6 лет назад 0
Просто закомментируйте / удалите последнюю строку, это было реализовано, чтобы помочь, если не найдена подходящая папка для всех 4 элементов pnr. LotPings 6 лет назад 0
Вы имеете в виду установленный уровень? Wyz 6 лет назад 0
Да, изменилось выше. LotPings 6 лет назад 0
Если я добавлю это в качестве комментария, это даст мне синтаксическую ошибку ... Wyz 6 лет назад 0
Он работает здесь, как указано выше, без изъянов. LotPings 6 лет назад 0
В комментарии у меня была ошибка, но, удалив строку, она прекрасно работает, спасибо за вашу поддержку. Wyz 6 лет назад 1

Похожие вопросы