powershell中的Expand-Archive无法提取嵌套的文件夹和文件

时间:2018-04-30 19:25:15

标签: powershell

我有以下简单的PowerShell来将zip文件夹(包含其他文件夹和仅日志文件)提取到目的地

$FolderPath = "C:\Temp\Whatever"

Expand-Archive -Path "$FolderPath\logs.zip" -DestinationPath "$FolderPath\logs"

不幸的是,这会返回如下所示的一大堆错误....

Remove-Item : Cannot find path 'C:\Temp\Whatever\logs\1_Selenium SEPA-Test\Attempt1\1_Start VM's\Release\1_Initialize Agent.log' because it does not exist.
At C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules\Microsoft.PowerShell.Archive\Microsoft.PowerShell.Archive.psm1:410 char:46
+ ...                 $expandedItems | % { Remove-Item $_ -Force -Recurse }
+                                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (C:\Temp\Whateve...alize Agent.log:String) [Remove-Item], ItemNotFoundException
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.RemoveItemCommand

Remove-Item : Cannot find path 'C:\Temp\Whatever\logs\1_Selenium SEPA-Test\Attempt1\1_Start VM's\Release\1_Initialize Job.log' because it does not exist.
At C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules\Microsoft.PowerShell.Archive\Microsoft.PowerShell.Archive.psm1:410 char:46
+ ...                 $expandedItems | % { Remove-Item $_ -Force -Recurse }
+                                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (C:\Temp\Whateve...tialize Job.log:String) [Remove-Item], ItemNotFoundException
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.RemoveItemCommand

和其他类似的错误

我可以确认第一个错误C:\Temp\Whatever\logs\1_Selenium SEPA-Test\Attempt1\1_Start VM's\Release\1_Initialize Agent.log中引用的文件确实存在于等效位置的zip文件夹中...

enter image description here

脚本结束后,我会在指定的目录中看到一个不完整的文件夹。

enter image description here

这是怎么回事?

谢谢,

5 个答案:

答案 0 :(得分:1)

我过去曾遇到过这个模块的问题,而且我和一位同事拼凑了以下内容

# This script was created to extract the contents of multiple ZIP files located in a directory
# structure. Each ZIP files is extracted within the folder it resides.

# File path
$filepath = Get-ChildItem -Path 'C:\Users\Luke\Desktop\ArchivedScripts\' -Filter *.zip -Recurse

# convert filepath to NameSpace object
$shell = new-object -com shell.application

# ForEach Loop processes each ZIP file located within the $filepath variable
foreach($file in $filepath)
{
    $zip = $shell.NameSpace($file.FullName)
    foreach($item in $zip.items())
    {
        $shell.Namespace($file.DirectoryName).copyhere($item)
    }
    Remove-Item $file.FullName
}

也许这有用吗?

答案 1 :(得分:0)

在命令中添加-force对我有用。

答案 2 :(得分:0)

我有同样的问题。 如果要导出的文件路径过长,则会发生此问题。

答案 3 :(得分:0)

我遇到了同样的错误,当我删除ZIP文件路径的双引号时,它对我有用。

例如:

$FolderPath = "C:\Temp\Whatever"

Expand-Archive -Path $ FolderPath \ logs.zip -DestinationPath“ $ FolderPath \ logs”

答案 4 :(得分:0)

这是怎么回事?

Expand-Archive在尝试扩展某些文件时失败(在我的情况下,这是由于路径太长),并尝试删除它认为已提取的文件(请参见https://github.com/PowerShell/Microsoft.PowerShell.Archive/blob/master/Microsoft.PowerShell.Archive/Microsoft.PowerShell.Archive.psm1#L418),但是Remove-Item找不到任何文件,因为它们实际上并未提取。

切换到PowerShell 7对我来说解决了长途问题。