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

1

Вы можете использовать команду 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
1

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .