PowerShell设置文件夹Compressed压缩属性不生效问题咨询
问题原因
这个现象不属于权限问题,是你使用的属性修改方式不适用于NTFS压缩属性:
- 文件的Hidden、ReadOnly等属于通用文件属性,确实可以通过修改
FileInfo对象的Attributes属性直接生效 - Compressed是NTFS文件系统特有的扩展属性,需要调用系统专门的压缩接口才能修改,直接追加属性值的操作不会被文件系统识别处理。
可用的实现方案
方案1:调用系统compact命令(最简单)
PowerShell可直接调用Windows自带的compact工具实现压缩,示例代码如下:
# 压缩目标文件夹及所有子内容 compact /c /s:"D:\Aither\Pca\Test" /i
参数说明:
/c:指定启用压缩操作/s:"路径":指定要处理的根目录,同时递归处理所有子目录内的文件/i:忽略操作过程中出现的错误
如果仅需要压缩文件夹本身、不需要处理子内容,去掉/s参数即可。如果需要取消压缩,将/c参数替换为/u即可。
方案2:使用WMI/CIM接口(纯PowerShell原生实现)
如果需要完全用PowerShell原生接口实现,可调用Win32_Directory的压缩方法,代码如下:
$targetPath = "D:\Aither\Pca\Test" # 路径转义处理 $escapedPath = $targetPath.Replace('\','\\') $dirObject = Get-CimInstance -ClassName Win32_Directory -Filter "Name = '$escapedPath'" # 执行压缩操作 Invoke-CimMethod -InputObject $dirObject -MethodName Compress
如果需要取消压缩,将方法名改为Uncompress即可。
内容的提问来源于stack exchange,提问作者ArthurR
相关产品推荐
相关产品推荐

