批处理文件给出File Not Found错误

时间:2014-03-19 22:02:36

标签: windows search batch-file

正在处理系统文件搜索脚本以检索目录中所有文档的名称,以及包含确定搜索字符串的所有子目录。基本上,它会记录搜索结果。让它也搜索文件名会很好,但这还不重要。

代码:

@echo off
echo - Will search all files in current directory, and subdirectories.
echo - Will ignore case sensitivity.
echo - Will only search for term within readable documents.
set /p searchfilter=Search Filter: 
set results=%CD%\results.txt
echo Searching...
echo Results: > "%results%"
for /f "usebackq tokens=*" %%i in (`dir /s/b/A:-D/o:e`) do (
    find /i "%searchfilter%" "%%~nxi" >nul && echo %%~nxi >> "%results%"
)
echo Search complete.
pause

Run-down:系统向用户请求一个字符串。然后,系统保存结果文件的句柄(认为可以解决问题,但没有)。系统然后从目录和子目录中过滤所有文件(不包括文件夹),打印文件的裸名称(带扩展名),在此处继续扫描每个文件以查找搜索字符串,并将所有正搜索结果保存到文本文件。

在许多文件中,我收到“找不到文件 - ”错误,需要帮助识别它。我的猜测是,它与尝试查找没有目录句柄的子目录文件有关。

2 个答案:

答案 0 :(得分:1)

find /i "%searchfilter%" "%%i" >nul && echo %%~nxi >> "%results%"

应该解决您的问题,因为您已经标记了自己。如果您要搜索的是一个名为fred.txt的文件,该文件存在于子目录中但在扫描的子树根中为mot,那么您将收到File not found错误。

您可以选择是仅回显results的名称和扩展名,还是回显完整的文件名,当然。就个人而言,我使用`%% i并获得整个事情。

我也改变了

for /f "usebackq tokens=*" %%i in (`dir /s/b/A:-D/o:e`) do (

for /f "delims=" %%i in ('dir /s/b/A:-D/o:e') do (

但在这种情况下,这只是风格问题。

答案 1 :(得分:0)

这应该为您提供一个搜索当前文件夹树中文件名的工具,并将结果记录到文件中 - 格式为c:\path\file.ext

searchstring替换为您的搜索字词,如果要搜索所有文件,请删除*.doc,如果要过滤多种文件类型,请将其替换为*.doc *.txt *.ini *.src

@echo off
dir /b /s /a-d *.doc |findstr /r /i ".*\\.*searchstring.*" >results.txt