Batch file 在批处理中搜索目录-将整个路径存储在文件中

Batch file 在批处理中搜索目录-将整个路径存储在文件中,batch-file,for-loop,dir,findstr,Batch File,For Loop,Dir,Findstr,我想找到一种方法来搜索特定路径或驱动器中的特定目录,并将它们打印到文件中以供进一步使用 例如,在以下结构中: D:\Dir1\Dir2\Wanteddir D:\Dir1\Dir3\Wanteddir D:\Dir1\Dir4\Wanteddir 它应该创建一个与上述模式完全相同的文件“result.txt” 现在,我从头开始创建了一个脚本,并对现有的脚本进行了一些研究。 让它工作起来 @echo off setlocal enabledelayedexpansion set "tmp_re

我想找到一种方法来搜索特定路径或驱动器中的特定目录,并将它们打印到文件中以供进一步使用

例如,在以下结构中:

D:\Dir1\Dir2\Wanteddir
D:\Dir1\Dir3\Wanteddir
D:\Dir1\Dir4\Wanteddir
它应该创建一个与上述模式完全相同的文件“result.txt”

现在,我从头开始创建了一个脚本,并对现有的脚本进行了一些研究。 让它工作起来

@echo off
setlocal enabledelayedexpansion

set "tmp_result_file=temp.txt"
set "result_file=result.txt"

if exist %tmp_result_file% del %tmp_result_file%
if exist %result_file% del %result_file%

dir d: /s > temp.txt

set /p searchdir=Please enter the directory name: 

for /f "tokens=3* delims= " %%i in ('FINDSTR /C:"\%searchdir%" %tmp_result_file%') do echo %%i >> %result_file%
for /f "tokens=1,2,3 delims= " %%a in ('find /C "\%searchdir%"    %result_file%') do set "amount=%%c"

echo.

Echo The list of found directories is %amount% lines long and contains     following paths.
echo.
type result.txt
现在这个代码的问题是,它“捕获”了所有包含输入单词的目录。在目录名的开头

因此,如果我只输入“Wanteddir”而不是“Wanteddir”,脚本将搜索以“Wanteddir”开头的所有目录

例如:

D:\Dir1\Dir2\Wanteddir
D:\Dir1\Dir3\Wanteddir
D:\Dir1\Dir4\Wanteddir
D:\Wanted\Exampledir
D:\Dir1\Wantedtest\Exampledir
etc..
对于这个问题,如有任何建议,我将不胜感激。 也许你也可以建议一些更可靠的方法来做这样的搜索。 另一个问题是,“delims”是一个空间。因此,如果有人在目录名中使用空格,输出也将是一些垃圾

到目前为止是thx。

精确匹配

dir /s /b /ad wanted

包含通缉犯

dir /s /b /ad *wanted*
在桌面上放入文件

dir /s /b /ad *wanted* > "%userprofile%\desktop\Results.txt"
始终查看
dir
forfiles
以进行文件列表和搜索。

精确匹配

dir /s /b /ad wanted

包含通缉犯

dir /s /b /ad *wanted*
在桌面上放入文件

dir /s /b /ad *wanted* > "%userprofile%\desktop\Results.txt"

始终查看
dir
forfiles
进行文件列表和搜索。

无需先获取所有文件/文件夹的列表-您可以直接跳到答案

有人可能会认为
dir/b/s/ad d:wantedDir
会起作用

不幸的是,如果在没有任何通配符的情况下对文件夹名执行DIR,则DIR命令假定您希望查看该文件夹,而不是列出该特定文件夹名:-(

解决方案是添加通配符,然后通过管道将结果发送到FINDSTR以清除不需要的文件夹:

dir /b /s /ad d:wantedDir* | findstr /iec:"\\wanteddir" >result.txt
/I
选项使搜索忽略大小写

/E
选项使搜索只匹配每行的末尾

/C
选项使搜索成为文字搜索,并允许在搜索中使用空格


前导的
\
表示一个
\
,这是一个奇怪的怪癖,literal FINDSTR搜索有时需要转义反斜杠,因为
\\
不需要先获取所有文件/文件夹的列表-您可以直接跳到答案

有人可能会认为
dir/b/s/ad d:wantedDir
会起作用

不幸的是,如果在没有任何通配符的情况下对文件夹名执行DIR,则DIR命令假定您希望查看该文件夹,而不是列出该特定文件夹名:-(

解决方案是添加通配符,然后通过管道将结果发送到FINDSTR以清除不需要的文件夹:

dir /b /s /ad d:wantedDir* | findstr /iec:"\\wanteddir" >result.txt
/I
选项使搜索忽略大小写

/E
选项使搜索只匹配每行的末尾

/C
选项使搜索成为文字搜索,并允许在搜索中使用空格


前导的
\\
表示一个
\
,这是一个奇怪的怪癖,文字搜索有时需要转义反斜杠,因为
\\

-1,您应该在发布之前始终测试您的代码!(我必须承认,我有时不能这样做,我的帖子经常在我不测试时受到影响)。OP明确表示他正在寻找一个特定的文件夹名称,没有通配符。您的解决方案似乎合乎逻辑,但根本不起作用。-1,您应该在发布之前始终测试代码!(我必须承认,我有时无法做到这一点,而我的帖子在不进行测试时往往会受到影响)。OP明确表示他正在寻找一个没有通配符的特定文件夹名称。您的解决方案似乎合乎逻辑,但根本不起作用。与您提出的问题无关,但您假设任何没有扩展名的名称始终是文件夹,但这不一定是真的。与您提出的问题无关,但您假设任何没有扩展名的名称都是文件夹,但这不一定是真的。