1

Я пытаюсь удалить огромное количество поврежденных JPEG из библиотеки изображений. Используя jpegsnoop.exe, я создал файл [$ jpgname.txt] для каждой картинки. Поврежденные jpegs будут иметь "ОШИБКУ" где-то в файле jpgname.txt.

До сих пор я могу обнаружить все файлы .txt, которые помечают плохие файлы, с помощью следующего:

gci ./ "* .txt" | Select-String -pattern "ОШИБКА" | Format-Table -GroupBy Path

Он выводит что-то вроде этого для каждого обнаруженного файла (их тысячи):

Path: H:\library\001.AE3923.jpg.txt

IgnoreCase     LineNumber Line           Filename       Path           Pattern        Context        Matches
----------     ---------- ----           --------       ----           -------        -------        -------
     True            285     ERROR: ... 001.AE3923.... H:\library... ERROR                         {ERROR}
     True            286 *** ERROR: ... 001.AE3923.... H:\library... ERROR                         {ERROR}
     True            287 *** ERROR: ... 001.AE3923.... H:\library... ERROR                         {ERROR}
     True            288 *** ERROR: ... 001.AE3923.... H:\library... ERROR                         {ERROR}
     True            290 *** ERROR: ... 001.AE3923.... H:\library... ERROR                         {ERROR}
     True            291 *** ERROR: ... 001.AE3923.... H:\library... ERROR                         {ERROR}
     True            292 *** ERROR: ... 001.AE3923.... H:\library... ERROR                         {ERROR}
     True            294 *** ERROR: ... 001.AE3923.... H:\library... ERROR                         {ERROR}
     True            295 *** ERROR: ... 001.AE3923.... H:\library... ERROR                         {ERROR}
     True            296 *** ERROR: ... 001.AE3923.... H:\library... ERROR                         {ERROR}
     True            298 *** ERROR: ... 001.AE3923.... H:\library... ERROR                         {ERROR}
     True            299 *** ERROR: ... 001.AE3923.... H:\library... ERROR                         {ERROR}
     True            301 *** ERROR: ... 001.AE3923.... H:\library... ERROR                         {ERROR}
     True            302 *** ERROR: ... 001.AE3923.... H:\library... ERROR                         {ERROR}
     True            304   ERROR: Ex... 001.AE3923.... H:\library... ERROR                         {ERROR}
     True            307     ERROR: ... 001.AE3923.... H:\library... ERROR                         {ERROR}

Вопрос в следующем: как мне перейти к удалению файла, возвращенного в строке "Путь" И его эквиваленту в формате jpeg? То есть, удалив оба H:\library\001.AE3923.jpg.txt и H:\library\001.AE3923.jpg для каждого файла, возвращаемого gci / grep.

Спасибо.

Ответ EBGreen:

Спасибо за ответ: это намного ближе. Я получаю следующие ошибки, хотя:

Remove-Item : Cannot bind argument to parameter 'Path' because it is null.
At line:1 char:171
+ gci ./ "*.txt" | Select-String -pattern "ERROR" | %{$txtFile = Get-Item $_.Path; $jpgFile = Get-Item ('{0}\{1}' -f $t
xtFile.DirectoryName, $txtFile.BaseName); Remove-Item <<<<  $jpgFile; Remove-Item $txtFile}
    + CategoryInfo          : InvalidData: (:) [Remove-Item], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.RemoveItemC
   ommand

Remove-Item : Cannot remove item H:\library\0010712x1024.jpg.txt: **The process cannot acces
s the file 'H:\library\0010712x1024.jpg.txt' because it is being used by another process.**
At line:1 char:193
+ gci ./ "*.txt" | Select-String -pattern "ERROR" | %{$txtFile = Get-Item $_.Path; $jpgFile = Get-Item ('{0}\{1}' -f $t
xtFile.DirectoryName, $txtFile.BaseName); Remove-Item $jpgFile; Remove-Item <<<<  $txtFile}
    + CategoryInfo          : WriteError: (H:\library\__I...12x1024.jpg.txt:FileInfo) [Remove-Item], IOException
    + FullyQualifiedErrorId : RemoveFileSystemItemIOError,Microsoft.PowerShell.Commands.RemoveItemCommand
Remove-Item : Cannot remove item H:\library\0010_54165.jpg.txt: The process cannot access
the file 'H:\library\0010_54165.jpg.txt' because it is being used by another process.
At line:1 char:193
+ gci ./ "*.txt" | Select-String -pattern "ERROR" | %{$txtFile = Get-Item $_.Path; $jpgFile = Get-Item ('{0}\{1}' -f $t
xtFile.DirectoryName, $txtFile.BaseName); Remove-Item $jpgFile; Remove-Item <<<<  $txtFile}
    + CategoryInfo          : WriteError: (H:\library\__I...0_54165.jpg.txt:FileInfo) [Remove-Item], IOException
    + FullyQualifiedErrorId : RemoveFileSystemItemIOError,Microsoft.PowerShell.Commands.RemoveItemCommand

1 ответ1

0

попробуй это:

gci ./ "*.txt" | Select-String -pattern "ERROR" | %{$txtFile = Get-Item $_.Path; $jpgFile = Get-Item ('{0}\{1}' -f $txtFile.DirectoryName, $txtFile.BaseName); Remove-Item $jpgFile; Remove-Item $txtFile}

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .