我想搜索并存储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%
答案 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>