如何在 Windows 资源管理器中搜索压缩或未压缩的文件?

Jer*_*ers 3 windows compression windows-explorer file-search

我知道 Windows 资源管理器可以在常规视图和搜索视图中为文件的 NTFS 压缩状态着色。

如何专门过滤/搜索在 NTFS 级别压缩或未压缩的文件?

最好是在 Windows XP 及更高版本中工作的解决方案(有相当多的硬件设备没有适用于任何 Vista 及更高版本的驱动程序)。

由于 Windows 搜索过于占用 CPU,我也想要一个没有它的解决方案。

and*_*415 6

命令行界面

Windows XP 没有提供开箱即用的列出压缩文件的方法,甚至高级搜索方法也不是为此类任务设计的。命令提示符来救援:

cd /d "C:\Some folder"
compact | findstr /c:" 1 C"
Run Code Online (Sandbox Code Playgroud)

cd命令仅用于导航到目标目录。当该compact命令不带参数运行时,它将列出所有文件及其压缩详细信息(如果有)。然后可以通过将其重定向到findstr. 值得一提的是,这种方法甚至可以在 Windows 2000 上运行。

尽管如此,输出还是相当冗长。要去除额外的信息,还需要做更多的工作:

for /f "tokens=9,*" %A in ('"compact | findstr /c:" 1 C" "') do @dir /b "%A*%B" 2>nul
Run Code Online (Sandbox Code Playgroud)

上面的命令将仅显示压缩文件名。该dir命令将有助于验证文件名以避免误报(例如1 C,名称中包含字符串 的文件名)。

您可以使用的其他参数是:

  • /s 将命令应用于所有子文件夹。
  • /a 显示隐藏文件或系统文件。

请注意,如果需要,这些参数必须同时用于命令compactdir命令。

要列出未压缩的文件,您可以使用命令的/v参数findstr来反转过滤器,并将tokens值更改为8(这是因为未压缩的文件没有C标记,会影响字符串标记化)。

进一步阅读


高级查询语法

Windows 搜索查询在高级查询语法 (AQS) 中指定,它不仅支持简单的文本搜索,还提供基于属性的高级查询操作。

来源:Windows 搜索 - 高级查询语法

AQS 最初是随 Windows 桌面搜索一起引入的,后来经过改进并作为Windows 搜索集成到 Windows Vista 中。您需要在早期操作系统中单独安装它

以下查询将列出所有设置了存档属性并被压缩的文件。它适用于 Windows XP、Vista 和 7。它也应该适用于 Windows 8.x,虽然我没有测试。

System.FileAttributes:(2080)
Run Code Online (Sandbox Code Playgroud)

在英语语言环境中,您还可以使用:

attributes:(2080)
Run Code Online (Sandbox Code Playgroud)

以下是最有用的值的列表:

FILE_ATTRIBUTE_READONLY = 1
FILE_ATTRIBUTE_HIDDEN = 2
FILE_ATTRIBUTE_SYSTEM = 4
FILE_ATTRIBUTE_ARCHIVE = 32
FILE_ATTRIBUTE_COMPRESSED = 2048
FILE_ATTRIBUTE_NOT_CONTENT_INDEXED = 8192
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,我结合了FILE_ATTRIBUTE_ARCHIVEFILE_ATTRIBUTE_COMPRESSED: 32 + 2048 = 2080

您可以使用逻辑OR运算符搜索任何组合。例如,要搜索只读或非只读的压缩文件:

System.FileAttributes:(2080 OR 2081)
Run Code Online (Sandbox Code Playgroud)

要反转搜索结果,您可以使用NOT运算符:

System.FileAttributes:NOT(2080 OR 2081)
Run Code Online (Sandbox Code Playgroud)

进一步阅读