Windows系统中能否按文件扩展名配置NTFS压缩规则
Windows系统中能否按文件扩展名配置NTFS压缩规则
你好呀!Windows系统本身并没有提供直接的图形化选项,能让你按文件扩展名批量设置NTFS压缩规则——也就是说没法直接在系统设置里勾选“压缩这些扩展名,排除那些”。不过别担心,我们可以用脚本或者命令行工具轻松实现这个需求,不用手动一个个操作。
核心思路
NTFS压缩是基于文件或文件夹属性的设置:如果给某个文件夹开启压缩,里面的现有文件和新添加的文件都会自动被压缩,但系统没法直接按扩展名筛选。所以要实现你的需求,就得通过脚本遍历文件,给指定扩展名的文件开启压缩属性,同时跳过那些你不想压缩的类型。
具体实现方法
方法一:PowerShell脚本(推荐,一次性处理所有规则)
Windows自带PowerShell,你可以直接用它写个脚本递归处理目标文件夹里的所有文件。把下面的代码复制到记事本里,修改目标路径后保存为.ps1格式(比如NTFSCompressByExt.ps1),右键选择“用PowerShell运行”即可:
# 定义需要压缩的文件扩展名(注意加英文点号) $compressExts = @(".doc", ".txt", ".bmp") # 定义不需要压缩的文件扩展名 $excludeExts = @(".hc", ".mkv", ".mp4", ".ogg", ".7z", ".zip", ".odt", ".docx", ".png", ".jpg") # 替换成你要处理的根文件夹路径,比如 "D:\MyDocuments" $rootPath = "你的目标文件夹路径" # 递归遍历所有文件并处理 Get-ChildItem -Path $rootPath -Recurse -File | ForEach-Object { # 先检查是否在排除列表,是则取消压缩(如果已压缩) if ($excludeExts -contains $_.Extension) { if ($_.Attributes -band [IO.FileAttributes]::Compressed) { Write-Host "取消压缩:$($_.FullName)" compact /U "$($_.FullName)" | Out-Null } return } # 再检查是否在需要压缩的列表,是则开启压缩(如果未压缩) if ($compressExts -contains $_.Extension) { if (-not ($_.Attributes -band [IO.FileAttributes]::Compressed)) { Write-Host "压缩:$($_.FullName)" compact /C "$($_.FullName)" | Out-Null } } }
这个脚本会自动:
- 递归遍历目标文件夹下的所有文件
- 给
.doc/.txt/.bmp文件开启NTFS压缩(如果还没压缩) - 确保
.hc/.mkv等你指定的文件不会被压缩(如果之前被压缩了会自动取消)
方法二:CMD命令行(逐个扩展名处理)
如果你不想写脚本,也可以用系统自带的compact命令,针对单个扩展名批量处理:
- 压缩所有
.doc文件(递归处理子文件夹):compact /C /S:"D:\YourFolder" *.doc - 取消所有
.mkv文件的压缩:compact /U /S:"D:\YourFolder" *.mkv
这种方式需要逐个执行对应扩展名的命令,适合需求简单的场景。
额外提醒
- 如果希望新添加的符合条件的文件自动被压缩,可以先给父文件夹开启NTFS压缩(右键文件夹→属性→高级→勾选“压缩内容以便节省磁盘空间”),然后用上面的脚本定期运行(比如通过任务计划程序设置每周执行一次),来自动取消那些你不想压缩的新文件的压缩属性。
- NTFS压缩会增加CPU负载,因为读写文件时需要实时解压/压缩,所以如果是频繁访问的文件,压缩可能会影响系统性能,这点要根据你的实际情况权衡。
备注:内容来源于stack exchange,提问作者Chameleon
相关产品推荐
相关产品推荐

