PowerShell 7Zip4Powershell архивирование .zip ошибка - PullRequest
0 голосов
/ 15 апреля 2020

В настоящее время имеется PSscript, который обрабатывает 1,65 ТБ файлов .bmp, отсортированных по папкам по yyyy / MM / dd / HH, заменяет @ в имени файла и затем преобразуется в .jpg. То, что я не могу пройти, это следующий шаг, который выдает мне ошибку, потому что он пытается заархивировать созданный zip-файл. Как мне это предотвратить? Я попытался -Exclude, но я думаю, что это должно быть сделано непосредственно перед фактическим сжатием. попробовал -Append, и это не удается для файла не найден. (последний шаг - удалить файлы, которые были заархивированы, но я думаю, что это можно сделать с помощью Remove-Item)

Структура каталогов выглядит так с файлами в младшем дочернем каталоге:

D:\Test\Processed\2020\01\13\13
D:\Test\Processed\2020\01\13\14
D:\Test\Processed\2020\01\13\15
D:\Test\Processed\2020\01\13\16
D:\Test\Processed\2020\01\13\17
D:\Test\Processed\2020\01\13\18
D:\Test\Processed\2020\01\13\19
D:\Test\Processed\2020\01\13\20
D:\Test\Processed\2020\01\13\21
D:\Test\Processed\2020\01\13\22
D:\Test\Processed\2020\01\13\23

Скрипт PowerShell

$sourceRootPath = "D:\Test\Processed\2020\01\13"
$targetRootPath = "D:\Test\Processed\2020\Archived"
Get-ChildItem -Path $sourceRootPath -Recurse -Exclude *.zip | Where-Object {$_.PSIsContainer} | ForEach-Object {
    $directoryFullName = $_.FullName
    $directoryName = $_.Name
#$folderPathToCompress - redundant but keeps my thinking straight for now
    $folderPathToCompress = $directoryFullName

# This creates an error that the .zip file does not exist and exits
    #Compress-7Zip -Path $folderPathToCompress -ArchiveFileName $directoryFullName\$directoryName.zip -Format Zip -CompressionLevel Ultra -Append

    # This creates the .zip file BUT creates an error when it tries to zip the .zip file it is creating
    #Compress-7Zip -Path $folderPathToCompress -ArchiveFileName $directoryFullName\$directoryName.zip -Format Zip -CompressionLevel Ultra 

}

Я разберусь с этим постом, извините за ошибки, я открыт для изучения двух вещей одновременно, но это занимает в 4 раза больше времени ... так что вернемся к этому.

1.) Я использую модуль 7Zip4Powershell - это выглядело как хорошая идея, но, возможно, мне следует придерживаться передачи всего в переменную, а затем в Invoke-Expression, таким образом, использовать не модуль, а команду 7zip напрямую (?)

2.) Сделано несколько попыток с теми же результатами, но проблема не решена ... пока что это то, на что похожа ошибка, и различные попытки ниже.

Compress-7Zip : The process cannot access the file 'D:\Test\Processed\2020\01\13\13\13.zip' because it is being used by another process.
At C:\Users\moe3srv\Desktop\test2.ps1:19 char:6
+     (Compress-7Zip -Path $folderPathToCompress -ArchiveFileName $dire ...
+      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : NotSpecified: (SevenZip4PowerS...+CompressWorker:CompressWorker) [Compress-7Zip], IOException
+ FullyQualifiedErrorId : err01,SevenZip4PowerShell.Compress7Zip
(Get-ChildItem -Path $sourceRootPath -Recurse) 
(Get-ChildItem -Path $sourceRootPath -Recurse -Exclude .zip )
(Get-ChildItem -Path $sourceRootPath -Recurse -Exclude *.zip )
...