在子文件夹中搜索Doc和Docx文件

时间:2018-09-01 01:34:51

标签: batch-file

我想搜索并存储doc和docx文件路径到变量。下文提到的p变量中的“ BaseDir =%p%”包含路径“ X:\ NEW-ENDORSEMENTS \ Backlog_checked \ cne \ CLIENT-SUPPLIED \ Backlog Transfer \非EV文章\ 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 :(得分:0)

为什么有那么多for循环?如果要获取任何doc或docx文件的路径,为什么需要findstr?

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"
)

如果您仍想将其设置为变量,则需要延迟扩展才能在括号循环中设置变量。

答案 1 :(得分:0)

仅在可能存在一个包含.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之前的操作系统中,它不希望包含 ! 字符的目录路径,并且由于基本目录路径的长度,可能会超出可变环境的大小。 / em>