如何从 Windows 搜索中排除特定目录?

如何从 Windows 搜索中排除特定目录?

我想在驱动器 C: 上搜索文件。我确信它不存在于特定目录(例如 Program Files)中。因此,为了缩短搜索时间,我希望 Windows 排除在这些特定文件夹中的搜索。我该如何执行这样的搜索(在 C 驱动器中搜索但可以跳过特定文件夹)?

我希望答案是一种 Windows 搜索方法,但并不反对它是一个脚本或其他简单程序。

答案1

与 user117893 的回答一致,并循环使用该dir命令for。您可以使用robocopyxcopy/L(仅列出)选项一起搜索文件。

Robocopy

只需指定起始目录C:\和目标文件名*File.txt

robocopy C:\ %Temp% *File.txt /S /XD Windows "Program Files" "Program Files (x86)" /XJ /L /NS /NC /NDL /NP /NJH /NJS

输出

C:\Users\Username\Desktop>robocopy C:\ %Temp% *Snapshot.txt /S /XD Windows "Program Files" "Program Files (x86)" /XJ /L /NS /NC /NDL /NP /NJH /NJS

                            C:\Temp\2013-02-13-1408-31_Snapshot.txt
                            C:\Temp\2013-02-13-1523-47_Snapshot.txt
                            C:\Temp\2013-02-13-1534-17_Snapshot.txt
                            C:\Temp\2013-02-13-1535-55_Snapshot.txt
                            C:\Temp\2013-02-13-1537-44_Snapshot.txt
                            C:\Temp\2013-02-18-1552-44_Snapshot.txt
                            C:\Temp\2013-02-18-1553-21_Snapshot.txt
                            C:\Temp\2013-02-18-1556-05_Snapshot.txt
                            C:\Temp\2013-02-18-1558-45_Snapshot.txt
                            C:\Temp\2013-02-18-1610-06_Snapshot.txt

复制

安装需要几个额外的步骤。

  1. 必须创建一个exclude.txt包含搜索中要排除的关键字的文本文件。
  2. 为了防止出现循环复制错误消息,必须创建临时驱动器号或使用另一个驱动器作为目标目录。
  3. 然后指定起始目录C:\和目标文件名*File.txt

排除.txt

\Windows\
\Program Files\
\Program Files (x86)\

命令

subst Z: %Temp%
xcopy C:\*File.txt Z:\ /S /L /EXCLUDE:exclude.txt
subst Z: \d

输出

C:\Users\Username\Desktop>xcopy C:\*Snapshot.txt Z:\ /S /L /EXCLUDE:exclude.txt
C:\Temp\2013-02-13-1408-31_Snapshot.txt
C:\Temp\2013-02-13-1523-47_Snapshot.txt
C:\Temp\2013-02-13-1534-17_Snapshot.txt
C:\Temp\2013-02-13-1535-55_Snapshot.txt
C:\Temp\2013-02-13-1537-44_Snapshot.txt
C:\Temp\2013-02-18-1552-44_Snapshot.txt
C:\Temp\2013-02-18-1553-21_Snapshot.txt
C:\Temp\2013-02-18-1556-05_Snapshot.txt
C:\Temp\2013-02-18-1558-45_Snapshot.txt
C:\Temp\2013-02-18-1610-06_Snapshot.txt
10 File(s)

笔记

目标只需要使用命令(%Temp%),由于/L

在列出排除项的情况下,这两个命令都只需要不到几秒钟的时间即可运行。

答案2

或者,如果您不想使用第三方软件,您确实可以通过命令行来执行此操作。

处理带有空格的目录名称有点麻烦,所以C:\Program Files它不是一个简单的脚本,但它在我 Windows 7 中有效:

@echo off
for /f "tokens=*" %%A in ('dir /b /ad C:\') do (
    if "C:\%%A"==%2 (
        echo Not scanning %2
    ) else (
        dir /s /b "C:\%%A\%1"
    )
)

用法:file.bat file_to_be_searched.extension "C:\directory\not\to\search"

请注意目录中的内容"",您必须使用它才能使脚本正常工作。

其作用是:对于命令输出的每一行(所有字符)dir /b /ad C:\(列出中的目录)C:\,执行:

如果C:\directory是,your_directory则不要扫描它。否则,查找您在其中指定的文件。

示例(我命名了脚本search.bat并放置了一个名为的a.txt文件C:\Program Files

C:\Users\XXXX\Desktop>search.bat a.txt "C:\Windows"
File Not Found
File Not Found
File Not Found
File Not Found
File Not Found
C:\Program Files\a.txt
File Not Found
File Not Found
File Not Found
File Not Found
File Not Found
Not scanning "C:\Windows"

您可以调整脚本,使其不再搜索多个目录,并添加更多if语句。

附言:我忘了说了,这只会搜索根目录下的文件夹,也就是C:\。如果你想搜索不同位置的文件夹,你必须调整脚本。谢谢。

答案3

放弃 Windows Search,改用 FileSeek。它是免费软件。您可以排除目录、搜索文件内容等。它曾多次拯救我。值得一试:

http://www.fileseek.ca/

答案4

在 Windows 搜索中执行此操作的一种方法是使用-folder(C:\Path)。如果文件夹名称是唯一的(至少就搜索区域而言),您可以像这样使用文件夹名称:-folder(Program Files)

如果要包含该文件夹内的子文件夹,可以使用-foldername:(C:\Path)

这里了解更多信息。我在 Windows 7 上测试过,可以正常工作。不确定其他版本是否可用。

相关内容