#powershell #parsing #error-handling #7zip
#powershell #Синтаксический анализ #обработка ошибок #7zip
Вопрос:
Я просмотрел много сообщений, но не смог найти ссылку на эту проблему. У меня есть код, который проверяет набор zip-файлов с определенным шаблоном в имени. После тестирования я вижу приведенный ниже формат для файла с ошибками и без ошибок. Я могу проанализировать его с помощью архивов с ошибкой, но я не могу получить имя файла с ошибкой. Моя конечная цель — получить имя файла всех файлов с ошибками из приведенного ниже результата ошибки 7zip.
Не могли бы вы помочь мне с этим, пожалуйста? Спасибо
7-Zip 18.05 (x64) : Copyright (c) 1999-2018 Igor Pavlov : 2018-04-30
Scanning the drive for archives:
1 file, 40021368 bytes (39 MiB)
Testing archive: C:UsersLozzyDocumentsARDFbrokenCart_Weel_#10-AT_2020-08-06_13268.txt.gz
--
Path = C:UsersLozzyDocumentsARDFbrokenCart_Weel_#10-AT_2020-08-06_13268.txt.gz
Type = gzip
Headers Size = 10
Sub items Errors: 1
Archives with Errors: 1
Sub items Errors: 1
7-Zip 18.05 (x64) : Copyright (c) 1999-2018 Igor Pavlov : 2018-04-30
Scanning the drive for archives:
1 file, 40021368 bytes (39 MiB)
Testing archive: C:UsersLozzyDocumentsARDFbrokenCart_Weel_#210-AT_2020-08-06_13268.txt - Copy.gz
--
Path = C:UsersLozzyDocumentsARDFbrokenCart_Weel_#210-AT_2020-08-06_13268.txt - Copy.gz
Type = gzip
Headers Size = 10
Sub items Errors: 1
Archives with Errors: 1
Sub items Errors: 1
7-Zip 18.05 (x64) : Copyright (c) 1999-2018 Igor Pavlov : 2018-04-30
Scanning the drive for archives:
1 file, 56581 bytes (56 KiB)
Testing archive: C:UsersLozzyDocumentsARDFbrokenCart_Weel_#DT-F@_2020-08-06_13268.txt.gz
--
Path = C:UsersLozzyDocumentsARDFbrokenCart_Weel_#DT-F@_2020-08-06_13268.txt.gz
Type = gzip
Headers Size = 10
Everything is Ok
Size: 504716
Compressed: 56581
Ответ №1:
Я бы разделил содержимое этого журнала на 7-Zip 18.05 (x64) : Copyright (c) 1999-2018 Igor Pavlov : 2018-04-30
строки и использовал Where-Object
для фильтрации только блоков, которые есть Archives with Errors
в нем.
Затем используйте регулярное выражение, чтобы получить Path =
имя файла
Для демонстрации я использую Here-String . В реальной жизни вам, вероятно, потребуется загрузить это из файла с
$zipLog = Get-Content -Path 'The7ZipErrorLog.txt' -Raw
( -Raw
здесь необходимо получить все в одной многострочной строке)
$zipLog = @"
7-Zip 18.05 (x64) : Copyright (c) 1999-2018 Igor Pavlov : 2018-04-30
Scanning the drive for archives:
1 file, 40021368 bytes (39 MiB)
Testing archive: C:UsersLozzyDocumentsARDFbrokenCart_Weel_#10-AT_2020-08-06_13268.txt.gz
--
Path = C:UsersLozzyDocumentsARDFbrokenCart_Weel_#10-AT_2020-08-06_13268.txt.gz
Type = gzip
Headers Size = 10
Sub items Errors: 1
Archives with Errors: 1
Sub items Errors: 1
7-Zip 18.05 (x64) : Copyright (c) 1999-2018 Igor Pavlov : 2018-04-30
Scanning the drive for archives:
1 file, 40021368 bytes (39 MiB)
Testing archive: C:UsersLozzyDocumentsARDFbrokenCart_Weel_#210-AT_2020-08-06_13268.txt - Copy.gz
--
Path = C:UsersLozzyDocumentsARDFbrokenCart_Weel_#210-AT_2020-08-06_13268.txt - Copy.gz
Type = gzip
Headers Size = 10
Sub items Errors: 1
Archives with Errors: 1
Sub items Errors: 1
7-Zip 18.05 (x64) : Copyright (c) 1999-2018 Igor Pavlov : 2018-04-30
Scanning the drive for archives:
1 file, 56581 bytes (56 KiB)
Testing archive: C:UsersLozzyDocumentsARDFbrokenCart_Weel_#DT-F@_2020-08-06_13268.txt.gz
--
Path = C:UsersLozzyDocumentsARDFbrokenCart_Weel_#DT-F@_2020-08-06_13268.txt.gz
Type = gzip
Headers Size = 10
Everything is Ok
Size: 504716
Compressed: 56581
"@
$zipLog -split '7-Zip. Igor Pavlov. d{4}-d{2}-d{2}' | Where-Object { $_ -match 'Archives with Errors' } | ForEach-Object {
([regex] '(?im)^Path = (. )').Match($_).Groups[1].Value
}
Вывод:
C:UsersLozzyDocumentsARDFbrokenCart_Weel_#10-AT_2020-08-06_13268.txt.gz C:UsersLozzyDocumentsARDFbrokenCart_Weel_#210-AT_2020-08-06_13268.txt - Copy.gz
В регулярном выражении (?im)
означает, что сопоставление выполняется без учета регистра и позволяет привязкам ^
или $
совпадать при разрывах строк, поскольку каждый текстовый блок представляет собой многострочную строку.