如何解压缩多个文件?
How do I unzip multiple files?
我正在尝试遍历文件夹中的 zip 文件并解压缩它们。我收到 zip.items()
的空错误。这个值怎么可能为空?
当我 Write-Host $zip
时,发布的值为 System.__ComObject
。
$dira = "D:\User1\Desktop\ZipTest\IN"
$dirb = "D:\User1\Desktop\ZipTest\DONE\"
$list = Get-childitem -recurse $dira -include *.zip
$shell = new-object -com shell.application
foreach($file in $list)
{
$zip = $shell.NameSpace($file)
foreach($item in $zip.items())
{
$shell.Namespace($dirb).copyhere($file)
}
Remove-Item $file
}
我收到的错误消息是:
You cannot call a method on a null-valued expression.
At D:\Users\lr24\Desktop\powershellunziptest2.ps1:12 char:29
+ foreach($item in $zip.items <<<< ())
+ CategoryInfo : InvalidOperation: (items:String) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
您缺少 shell 初始化。
$shell = new-object -com shell.application
在命名空间之前使用它。
$file
是一个 FileInfo
对象,但 NameSpace()
方法需要一个具有完整路径的字符串或一个数字常量。此外,您需要复制 $item
,而不是 $file
。
改变这个:
foreach($file in $list)
{
$zip = $shell.NameSpace(<b>$file</b>)
foreach($item in $zip.items())
{
$shell.Namespace($dirb).copyhere(<b>$file</b>)
}
Remove-Item $file
}
进入这个:
foreach($file in $list)
{
$zip = $shell.NameSpace(<b>$file.FullName</b>)
foreach($item in $zip.items())
{
$shell.Namespace($dirb).copyhere(<b>$item</b>)
}
Remove-Item $file
}
如果你的 $env:path 中有 7-zip
PS> $zips = dir *.zip
PS> $zips | %{7z x $_.FullName}
#unzip with Divider printed between unzip commands
PS> $zips | %{echo "`n`n======" $_.FullName; 7z x $_.FullName}
您可以在此处获取 7-zip:
http://www.7-zip.org/
PS> $env:path += ";C:\Program Files\7-Zip"
解释:
百分比后跟花括号称为 foreach 运算符:%{ }
此运算符表示管道中的 "Foreach" 对象,花括号中的代码调用放置在“$_”变量中的对象。
我正在尝试遍历文件夹中的 zip 文件并解压缩它们。我收到 zip.items()
的空错误。这个值怎么可能为空?
当我 Write-Host $zip
时,发布的值为 System.__ComObject
。
$dira = "D:\User1\Desktop\ZipTest\IN"
$dirb = "D:\User1\Desktop\ZipTest\DONE\"
$list = Get-childitem -recurse $dira -include *.zip
$shell = new-object -com shell.application
foreach($file in $list)
{
$zip = $shell.NameSpace($file)
foreach($item in $zip.items())
{
$shell.Namespace($dirb).copyhere($file)
}
Remove-Item $file
}
我收到的错误消息是:
You cannot call a method on a null-valued expression.
At D:\Users\lr24\Desktop\powershellunziptest2.ps1:12 char:29
+ foreach($item in $zip.items <<<< ())
+ CategoryInfo : InvalidOperation: (items:String) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
您缺少 shell 初始化。
$shell = new-object -com shell.application
在命名空间之前使用它。
$file
是一个 FileInfo
对象,但 NameSpace()
方法需要一个具有完整路径的字符串或一个数字常量。此外,您需要复制 $item
,而不是 $file
。
改变这个:
foreach($file in $list)
{
$zip = $shell.NameSpace(<b>$file</b>)
foreach($item in $zip.items())
{
$shell.Namespace($dirb).copyhere(<b>$file</b>)
}
Remove-Item $file
}
进入这个:
foreach($file in $list)
{
$zip = $shell.NameSpace(<b>$file.FullName</b>)
foreach($item in $zip.items())
{
$shell.Namespace($dirb).copyhere(<b>$item</b>)
}
Remove-Item $file
}
如果你的 $env:path 中有 7-zip
PS> $zips = dir *.zip
PS> $zips | %{7z x $_.FullName}
#unzip with Divider printed between unzip commands
PS> $zips | %{echo "`n`n======" $_.FullName; 7z x $_.FullName}
您可以在此处获取 7-zip:
http://www.7-zip.org/
PS> $env:path += ";C:\Program Files\7-Zip"
解释:
百分比后跟花括号称为 foreach 运算符:%{ } 此运算符表示管道中的 "Foreach" 对象,花括号中的代码调用放置在“$_”变量中的对象。