在子文件夹中搜索文档和文档文件



我想搜索并存储变量的文档和docx文件路径。下面提到的 p 变量中的 "BaseDir=%p%" 包含路径 "X:\NEW-ENDORSEMENTS\Backlog_checked\cne\CLIENT-SUPPLIED\Backlog Transfer\Non EV articles\cne24314\Input_Files"。在此路径中包含子文件夹中的文档和 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%

以防万一可能有多个子目录包含.doc.docx文件,以下示例可能会传播变量,%$.doc%%$.docx%,以及所有这些变量:

@Echo Off
SetLocal EnableDelayedExpansion
Set "BaseDir=X:NEW-ENDORSEMENTSBacklog_checkedcneCLIENT-SUPPLIEDBacklog TransferNon EV articlescne24314Input_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

包含最后两行只是为了向您展示变量及其内容,并可根据需要替换为您自己的命令。
此脚本有局限性,主要是它在 pre-Vista 之前的操作系统中不起作用,它不需要包含!字符的目录路径,并且由于基本目录路径的长度,可能会超过可变环境的大小。

为什么这么多 for 循环?如果你想要任何文档或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"
)

如果仍想将它们设置为变量,则需要延迟扩展以在括号循环中设置变量。

最新更新