|
习惯用dism命令加上参数/compact:LZX来安装系统,但是系统并不会将全部文件都以最高压缩比来压缩文件,所以最后全部设置完毕后只能强制以最高压缩比再压缩一次。既然是强制,那么先前已经是LZX压缩过的文件又被重新压缩了一次。而且由于windows里面硬链接文件众多,这就相当于有些文件被解压缩了多次。再加上有些文件大小小于磁盘的分配单元大小,那么即使压缩了也不会减少占用空间。这些因素都使得电脑做了不少无用功。
所以琢磨了一个脚本,用着还行,电脑少做了不少有害无益的无用功,对SSD也是一种减负。
将横线下面的代码保存为LZX.ps1运行。
-----------------------------------------------------------------------
$ErrorActionPreference = "Stop"
function Compress-Files {
param(
[Parameter(Mandatory = $true)]
[string]$Path,
[Parameter()]
[int]$FileSize
)
$directories = @("Program Files", "Program Files (x86)", "Users", "ProgramData", "Windows")
foreach ($directory in $directories) {
Process-Directory "$Path\$directory" -FileSize $FileSize
}
Write-Host "文件压缩完成。"
Start-Sleep -Seconds 3
}
function Process-Directory {
param(
[Parameter(Mandatory = $true)]
[string]$DirectoryPath,
[Parameter()]
[int]$FileSize
)
Write-Host "处理目录:$DirectoryPath"
Get-ChildItem -Recurse -File $DirectoryPath | ForEach-Object {
$sourceFile = $_.FullName
if ($FileSize -and $_.Length -gt $FileSize) {
if (!(Compact "$sourceFile" | Select-String -Pattern "1 l")) {
Compress-File "$sourceFile"
}
} elseif (!$FileSize) {
if (!(Compact "$sourceFile" | Select-String -Pattern "1 l")) {
Compress-File "$sourceFile"
}
}
}
}
function Compress-File {
param(
[Parameter(Mandatory = $true)]
[string]$FilePath
)
Write-Host "正在使用 LZX 压缩文件:$FilePath"
Compact /C /F /A /I /EXE:LZX $FilePath
if ($?) {
Write-Host "文件压缩完成。"
} else {
Write-Host "文件压缩失败。"
# 可以添加日志记录功能,将失败的文件记录到日志文件中
}
}
$ImagePath = Read-Host "请输入要压缩的盘符(带冒号)"
$FileSize = Read-Host "请输入要筛选的文件最小大小(单位字节)"
if ([string]::IsNullOrWhiteSpace($ImagePath)) {
Write-Host "输入为空,请重新输入。"
} elseif (![int]::TryParse($FileSize, [ref]$null) -or $FileSize -lt 0) {
Write-Host "文件大小不正确,请重新输入一个大于等于零的数字。"
} else {
Compress-Files -Path $ImagePath -FileSize $FileSize
}
|
|