Поиск документов и документов в подпапках - PullRequest
0 голосов
/ 01 сентября 2018

Я хочу найти и сохранить путь к файлам doc и docx к переменным. Ниже упомянутое «BaseDir =% p%» в переменной p содержит путь «X: \ NEW-ENDORSEMENTS \ Backlog_checked \ cne \ CLIENT-SUPPLIED \ Backlog Transfer \ Non EV Articles \ cne24314 \ Input_Files". В этом пути содержатся файлы doc и docx в подпапках.

Когда я запускаю приведенный ниже код, появляется сообщение об ошибке «FINDSTR не распознается». Пожалуйста, проверьте и очистите.

set "BaseDir=%p%"

For /f "delims=" %%A in ('
  Dir /B/S/A-D "%BaseDir%\*.doc" ^| Findstr /I "\\doc\\[^\\]*\.doc$"
') Do set doc_path="%%A"

for /f "tokens=*" %%b in ("%doc_path%") do (set doc="%%~dpb")

set BaseDir=%p%

For /f "delims=" %%A in ('
  Dir /B/S/A-D "%BaseDir%\*.docx" ^| Findstr /I "\\doc\\[^\\]*\.docx$"
') Do set docx_path="%%A"

for /f "tokens=*" %%b in ("%docx_path%") do (set docx="%%~dpb")

echo %docx%
echo %doc%

Ответы [ 2 ]

0 голосов
/ 01 сентября 2018

На всякий случай может быть более одного подкаталога, содержащего файлы .doc и .docx, в следующем примере могут распространяться переменные %$.doc% и %$.docx% со всеми из них:

@Echo Off
SetLocal EnableDelayedExpansion
Set "BaseDir=X:\NEW-ENDORSEMENTS\Backlog_checked\cne\CLIENT-SUPPLIED\Backlog Transfer\Non EV articles\cne24314\Input_Files"
For /F "Delims=" %%A In ('Where /R "%BaseDir%" *.doc *.docx 2^>Nul'
) Do If "!$%%~xA!"=="" (Set "$%%~xA=%%~dpA/") Else (
    If "!$%%~xA:%%~dpA/=!"=="!$%%~xA!" Set "$%%~xA=!$%%~xA! "%%~dpA/"
)
For %%A In ($.doc $.docx) Do If Not "!%%A!"=="" Set "%%A="!%%A:\/="!"
Set $.doc 2>Nul
Pause

Последние две строки включены только для того, чтобы показать вам переменные с их содержимым, и при необходимости могут быть заменены вашими собственными командами.
Этот скрипт имеет ограничения, основными из которых являются то, что он не будет работать в В операционных системах до Vista она не ожидает путей к каталогам, которые содержат ! символов, и из-за длины вашего базового пути к каталогу размер переменной среды может быть превышен.

0 голосов
/ 01 сентября 2018

Почему так много петель? Зачем нужен findstr, если вам нужен путь к любому файлу doc или docx?

For /f "delims=" %%A in ('Dir /B/S/A-D "%BaseDir%\*.doc*"') Do (
If "%%~xA"==".doc" echo %%~xA path "%%~dpA"
If "%%~xA"==".docx" echo %%~xA path "%%~dpA"
)

Если вы все еще хотите установить их как переменные, вам нужно задержать расширение для установки переменных в цикле в скобках.

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