You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将压缩文件存入源文件夹?PowerShell压缩进程占用报错求助

解决PowerShell压缩文件时的“文件被占用”问题并实现需求

首先得说清楚你原来的命令为什么会报错:[io.compression.zipfile]::CreateFromDirectory是用来压缩整个文件夹的全部内容的,你把输出路径直接指定为源文件夹C:\FolderOne时,它会默认生成一个和文件夹同名的FolderOne.zip放在这个文件夹里。但压缩过程中,这个新生成的zip文件会被当前压缩进程锁定,同时方法还要读取整个文件夹的内容(包括刚生成的这个zip),这就触发了“文件被其他进程占用”的错误。而且你的需求是压缩单个TextFile.txt成同名zip,用这个方法本身就不对哦。

下面给你两种针对性的解决方案:

方案1:压缩单个文件到同目录(完全匹配你的期望)

如果你只需要压缩TextFile.txt这一个文件,直接用PowerShell自带的Compress-Archive命令最方便,语法简单还不会踩坑:

Compress-Archive -Path "C:\FolderOne\TextFile.txt" -DestinationPath "C:\FolderOne\TextFile.zip" -Force
  • -Force参数的作用是覆盖已经存在的同名zip文件,如果不需要覆盖可以去掉这个参数。
  • 执行完之后,C:\FolderOne里就会同时存在TextFile.txt和TextFile.zip,完全符合你的预期效果。

方案2:如果需要压缩整个文件夹的内容(避免占用错误)

要是你实际需求是压缩C:\FolderOne里的所有文件,那不能直接把zip文件放在源文件夹里,或者用更省心的方式处理:

方式A:用.NET方法配合临时路径

先把zip生成到临时目录,再移动到目标文件夹:

# 定义临时zip路径
$tempZipPath = "C:\Temp\FolderOne.zip"
# 创建临时zip
[io.compression.zipfile]::CreateFromDirectory("C:\FolderOne", $tempZipPath)
# 移动到源文件夹
Move-Item -Path $tempZipPath -Destination "C:\FolderOne\FolderOne.zip" -Force

方式B:直接用Compress-Archive(推荐)

Compress-Archive会自动处理文件占用的问题,不需要手动折腾临时路径:

Compress-Archive -Path "C:\FolderOne\*" -DestinationPath "C:\FolderOne\FolderOne.zip" -Force

补充说明

之所以原来的命令报错,核心原因是:当CreateFromDirectory在源文件夹内创建zip文件后,它会遍历源文件夹的所有内容(包括刚创建的zip)进行压缩操作,但此时zip文件正被当前进程打开写入,无法被读取,所以抛出了文件占用的错误。

内容的提问来源于stack exchange,提问作者v_kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:45:20