PowerShell实现ZIP文件静默解压的问题求助
PowerShell实现ZIP文件静默解压的问题求助
针对你遇到的解压ZIP文件时弹出进度窗口的问题,我来给你梳理下可行的解决方案~
你提到翻了不少帖子都没找到有用信息,其实问题的核心就在于CopyHere方法的默认行为——它会主动弹出进度对话框,我们只需要给这个方法添加对应的静默参数就能解决问题。
先看你当前使用的代码:
$filepath = Get-ChildItem -Path \\Srcfile\data -Filter *.zip -Recurse $shell = new-object -com shell.application foreach($file in $filepath) { $zip = $shell.NameSpace($file.FullName) foreach($item in $zip.items()) { $shell.Namespace($file.DirectoryName).copyhere($item) } Remove-Item $file.FullName }
接下来只需要修改CopyHere这一行的调用,给它加上第二个参数,指定静默执行的标志即可:
方案一:仅隐藏进度窗口
把CopyHere调用修改为:
$shell.Namespace($file.DirectoryName).copyhere($item, 16)
这里的16对应Shell API中的FOF_SILENT常量,作用就是让解压过程不显示进度对话框。
方案二:隐藏进度+跳过覆盖确认
如果解压时遇到已存在的文件,默认会弹出确认覆盖的对话框,要是想一起跳过这个提示,可以使用参数20(即16 + 4,其中4对应FOF_NOCONFIRMATION常量):
$shell.Namespace($file.DirectoryName).copyhere($item, 20)
这样修改后,整个解压过程就会在后台静默完成,不会弹出任何窗口了。
另外补充一点:如果还想忽略解压过程中的错误提示(比如文件无法访问等情况不弹窗),可以再加上1048576(对应FOF_NOERRORUI常量),参数变为1048596,这个可以根据你的实际需求选择是否添加。
备注:内容来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

