我想在驱动器 C: 上搜索文件。我确信它不存在于特定目录(例如 Program Files)中。因此,为了缩短搜索时间,我希望 Windows 排除在这些特定文件夹中的搜索。我该如何执行这样的搜索(在 C 驱动器中搜索但可以跳过特定文件夹)?
我希望答案是一种 Windows 搜索方法,但并不反对它是一个脚本或其他简单程序。
答案1
与 user117893 的回答一致,并循环使用该dir
命令for
。您可以使用robocopy
或xcopy
与/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
复制
安装需要几个额外的步骤。
- 必须创建一个
exclude.txt
包含搜索中要排除的关键字的文本文件。 - 为了防止出现循环复制错误消息,必须创建临时驱动器号或使用另一个驱动器作为目标目录。
- 然后指定起始目录
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。它是免费软件。您可以排除目录、搜索文件内容等。它曾多次拯救我。值得一试:
答案4
在 Windows 搜索中执行此操作的一种方法是使用-folder(C:\Path)
。如果文件夹名称是唯一的(至少就搜索区域而言),您可以像这样使用文件夹名称:-folder(Program Files)
如果要包含该文件夹内的子文件夹,可以使用-foldername:(C:\Path)
看这里了解更多信息。我在 Windows 7 上测试过,可以正常工作。不确定其他版本是否可用。