У меня есть следующая простая оболочка 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 в эквивалентном месте ...
После завершения сценария я вижу незавершенную папку в указанном каталоге.
Что тут происходит?
Спасибо,
К сожалению, не помогает
Вы можете использовать 7z e? Для его запуска есть сценарий PowerShell.
Возможно, проблема связана с вашим архивом: github.com/PowerShell/Microsoft.PowerShell.Archive/issues/12 Эта проблема, похоже, теперь исправлена, поэтому вы можете обновить Powershell, если вы используете более старую версию.
Я использую powershell 5.1. Мне удалось собрать решение, используя 7z e
У меня были проблемы с этим модулем в прошлом, и мы с коллегой собрали следующие
# 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
}
Может быть, это пригодится?
Добавление -force к команде сработало для меня.
Я была такая же проблема. Эта проблема возникает, если пути к экспортируемым файлам слишком длинные.
Я не вижу подтверждения "слишком долгого" пути в вопросе.
У меня такая же ошибка, и у меня она сработала, когда я удалил двойные кавычки для пути к ZIP-файлу.
Например :
$FolderPath = "C:\Temp\Whatever"
Expand-Archive -Path $ FolderPath \ logs.zip -DestinationPath "$ FolderPath \ logs"
Whats going on here?
Expand-Archive
терпит неудачу при попытке расширить некоторые файлы (в моем случае это было из-за слишком длинного пути) и пытается удалить файлы, которые, по его мнению, были извлечены (см. https://github.com/PowerShell/Microsoft.PowerShell.Archive/blob/master/Microsoft.PowerShell.Archive/Microsoft.PowerShell.Archive.psm1#L418), но Remove-Item
не может найти никаких файлов, поскольку они не были фактически извлечен.
Переход на PowerShell 7 устранил для меня проблему с длинным путем.
Что, если вы просто переместите
-DestinationPath
в другую папку?