论坛朋友在网上找了一段ZIP格式压缩包解压代码:
Function Unzip-File() { param([string]$ZipFile,[string]$TargetFolder) if(!(Test-Path $TargetFolder)) { mkdir $TargetFolder } $shellApp = New-Object -ComObject Shell.Application $files = $shellApp.NameSpace($ZipFile).Items() $shellApp.NameSpace($TargetFolder).CopyHere($files) } Unzip-File -ZipFile D:\Product.zip -TargetFolder D:\V1
可是,该代码有个小问题,当重复一个路径解压就会出现替换提示,造成干扰,本人没找到直接强制覆盖的办法,但是想了另外一个办法:
Function Unzip-File() { param([string]$ZipFile,[string]$TargetFolder) if(!(Test-Path $TargetFolder)) { mkdir $TargetFolder } $shellApp = New-Object -ComObject Shell.Application $files = $shellApp.NameSpace($ZipFile).Items() #下面这句会删除已解压的,但不会影响目录内其它不相干的文件 $files|%{Remove-Item ("$TargetFolder/{0}" -f $_.name ) -Force -Recurse} $shellApp.NameSpace($TargetFolder).CopyHere($files) } Unzip-File -ZipFile "D:\soft\A常用\passxp.zip" -TargetFolder D:\V1
本文链接: https://www.pstips.net/powershell_unzip-file.html
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!
补充两点:1:目的文件夹TargetFolder必须存在,否则出错2:当目的文件已经存在时,默认会出现提示是否覆盖的对话框,如果不想出现这个提示,是有参数控制的,不用手动删除已有的目的文件,修改代码如下就可以了$shellApp.NameSpace($TargetFolder).CopyHere($files,16)还有其他控制参数,比如不显示进度条,详见http://msdn.microsoft.com/en-us/library/bb787866(VS.85).aspx
非常感谢宝贵建议,我开始找了老久没找到这种参数用法。谢谢