使用Compress-Archive -Update时匹配0文件竟删除现有Zip的问题
Compress-Archive 使用 -update 参数时匹配0个文件会删除现有压缩包的问题
这确实是Compress-Archive cmdlet一个反直觉的行为,属于设计缺陷范畴。
问题复现步骤:
# 创建一个小文件 echo 'bibbity' > bibbity.txt # 此-path参数匹配到bibbity.txt,创建bobbity.zip compress-archive -path bibbity.* -update -destinationpath bobbity.zip # 删除相关文件 rm bibbity.* # 此-path参数匹配不到任何文件,Compress-Archive竟删除了bobbity.zip! compress-archive -path bibbity.* -update -destinationpath bobbity.zip
行为对比:
- 预期:指定
-update参数时,仅应更新压缩包内的文件(添加新文件、替换已修改的文件),若没有匹配到源文件,应保留现有压缩包不做改动。 - 实际:当
-path匹配0个文件时,执行带-update的Compress-Archive会直接删除目标zip文件。
解决方案:
在执行压缩命令前先检查是否存在匹配的文件,避免误删:
# 尝试获取匹配的文件,忽略错误 $targetFiles = Get-Item -Path bibbity.* -ErrorAction SilentlyContinue if ($targetFiles) { # 有匹配文件时才执行压缩更新 Compress-Archive -Path $targetFiles -Update -DestinationPath bobbity.zip } else { Write-Warning "未找到匹配的源文件,跳过压缩操作" }
内容的提问来源于stack exchange,提问作者Roy Pardee
相关产品推荐
相关产品推荐

