1

Ситуация: у меня есть следующее дерево папок:

  • Root\

    • doc1\

      • doc1-r000.zip
      • doc1-r010.zip
      • ...
      • doc1-r051.zip
    • doc3\
      • doc3-r000.zip
      • doc3-r001.zip
      • ...
      • doc3-r012.zip
    • ...
    • docN\

      • ...
      • docN-rM.zip

где каждая подпапка содержит несколько ревизий документа в отдельных файлах zip. И имена папок, и номера ревизий являются прерывистыми. Почти все документы имеют разное количество ревизий. Они клонируются с удаленного FTP-сервера, поэтому все они имеют одинаковую метку времени и информация о дате исчезла.

Цель: Конечная цель состоит в том, чтобы извлечь в корень только самую последнюю версию каждого документа.

Инструменты. Доступны следующие инструменты: Windows 7, PowerShell 2 и 7-Zip, могут быть установлены дополнительные инструменты или обновления.

1 ответ1

1

В PowerShell с 7-Zip:

$root = "C:\adjust\path"

Get-ChildItem $root -Directory -Recurse -Include 'doc*' | ForEach-Object -Process {

    $n = 0
    $dir_name = ($_.FullName) + '\' + ($_.BaseName)

    while (Test-Path "$dir_name-r000.zip") {

        $num = "{0:d3}" -f $n
        $test = "$dir_name-r$num.zip"

        if (Test-Path $test) {

            $file_name = $test
            $n++

        } else {

            ."C:\Program Files\7-Zip\7zG.exe" e "$file_name" -o"$root\$_.BaseName"

            break

        }
    }
}

"Done!`n"
Pause

Это позволит извлечь архив с наибольшим номером из каждой папки, содержащей doc в новую подпапку в $root . Если вам не нужны подпапки, просто удалите \$_.BaseName из опции -o .

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