none
Обработка ошибки powershell RRS feed

  • Вопрос

  • Добрый день

    Восстановил файлы с поврежденного рейда, оказалось, что не все архивы рабочие...

    Смог накидать данный скрипт

    $path = "F:\TEST "
    $filter = "*.7z"
    $files = get-childitem -path $path -filter $filter | % { $_.FullName } 
    foreach ($file in $files) {
        & "C:\Program Files (x86)\7-Zip\7z.exe" t "$file" -r 
    }

    Получаю вывод

    7-Zip 9.20  Copyright (c) 1999-2010 Igor Pavlov  2010-11-18

    Processing archive: F:\TEST\Cisco-IOU-L2-L3-Collection-v2.7z

    Testing     i86bi-linux-l2-ipbasek9-15.1g.bin

    Testing     i86bi-linux-l2-upk9-12.2.bin     Data Error
    Testing     i86bi-linux-l2-upk9-15.0a.bin     Data Error

    Теперь, у меня например 10 000 файлов... в ручную обработать очень тяжело..

    Можно ли как то, по данному выводу, создать файл в котором будут ТОЛЬКО ошибки 

    Будет указан путь до битого архива  и только строки с ошибками

    F:\TEST\Cisco-IOU-L2-L3-Collection-v2.7z

    Testing     i86bi-linux-l2-upk9-12.2.bin     Data Error
    Testing     i86bi-linux-l2-upk9-15.0a.bin     Data Error

    не могу что то путное придумать

    11 августа 2015 г. 14:46

Ответы

Все ответы

  • Добавил еще рекурсию, совсем красиво стало

    и заменил filter на include, указав несколько типов архивов

    $path = "F:\TEST"
    $filter = "*.7z","*.rar","*.tar"
    $files = get-childitem -path $path -include $filter -Recurse | % { $_.FullName } 
     foreach ($file in $files) {
        & "C:\Program Files (x86)\7-Zip\7z.exe" t "$file" -r 
    }

    Вывожу все в файл через

    .\Untitled5.ps1 > output.txt

    Но хочется застрелиться.... анализировать... мильон файлов

    Так что, проблема анализа вывода в отедльный лог файл, сильно актуальна....

    11 августа 2015 г. 15:14
  • Можно и даже круто, было бы переместить архивы с ошибками в отдельное место и зеркальным содержанием папок

    Например

    Папка\Папка\Битый Архив

    Папка\Папка\Папка\Битый Архив

    И если в выводе есть ошибка, то файл перемещается в

    E:\Папка\Папка\Битый Архив

    E:\Папка\Папка\Папка\Битый Архив

    Таким образом, очищу от битого мяса свое хранилище и буду разбираться уже только с битыми архивами...

    11 августа 2015 г. 15:20
  • $path = "F:\TEST"
    $filter = "*.7z","*.rar","*.tar"
    $files = get-childitem -path $path -include $filter -Recurse | % { $_.FullName } 
     foreach ($file in $files) {
       $outmessage = & "C:\Program Files (x86)\7-Zip\7z.exe" t "$file" -r 
    if ($outmessage -like "*Error*"){
    "Problem with file $file"
    $outmessage
    } }

    Как то так


    The opinion expressed by me is not an official position of Microsoft

    • Предложено в качестве ответа Vector BCOModerator 12 августа 2015 г. 20:08
    • Помечено в качестве ответа KazunEditor 14 августа 2015 г. 6:49
    11 августа 2015 г. 16:38
    Модератор
  • Спасибо! очень помогло!

    теперь другая проблема...

    get-childitem : The specified path, file name, or both are too long. The fully qualified file name must be less than 
    260 characters, and the directory name must be less than 248 characters.

    =( есть какойто вариант это обойти?

    12 августа 2015 г. 9:47
    • Изменено Vector BCOModerator 12 августа 2015 г. 11:13
    • Предложено в качестве ответа Vector BCOModerator 12 августа 2015 г. 20:08
    • Помечено в качестве ответа KazunEditor 14 августа 2015 г. 6:49
    12 августа 2015 г. 11:11
    Модератор