测试环境:windows10、winserver2019.
场景:在一个目录下有很多文件,需要把这些文件逐一压缩,压缩后的文件直接放在该目录下即可。
在该目录下打开PowerShell 窗口,然后把这个代码复制-粘贴到 PowerShell 窗口,然后回车运行即可。
代码如下:
# 获取当前目录下所有文件(不含子目录)
Get-ChildItem -File | ForEach-Object {
$src = $_.FullName # 源文件完整路径
$dst = "$src.gz" # 目标文件完整路径(原文件名+.gz)
# 利用内置的 System.IO.Compression.GZipStream 进行压缩
try {
# 打开源文件流
$inStream = [System.IO.File]::OpenRead($src)
# 创建目标文件流
$outStream = [System.IO.File]::Create($dst)
# 创建 GZip 压缩流
$gzipStream = New-Object System.IO.Compression.GZipStream($outStream, [System.IO.Compression.CompressionMode]::Compress)
# 复制数据
$inStream.CopyTo($gzipStream)
Write-Host "已压缩:$($_.Name) -> $($_.Name).gz"
}
finally {
# 确保所有流都被关闭
if ($gzipStream) { $gzipStream.Dispose() }
if ($outStream) { $outStream.Dispose() }
if ($inStream) { $inStream.Dispose() }
}
}
效果见下图: