4

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

Вместо этого сначала произошло сжатие, поэтому теперь у меня есть сетевой ресурс, полный моих исходных каталогов, но все файлы были сжаты в свою собственную zip-папку.

Есть ли быстрый способ распаковать все zip-папки на сервере, где они находятся, а затем удалить ZIP-файлы? У меня есть 7-почтовый индекс, который, кажется, может сделать работу.

Что я пробовал до сих пор:

Я запустил поиск и ZIP-файлы, затем выбрал "Извлечь здесь" из меню 7zip, но он извлекает ZIP-файлы в любую папку, по которой я щелкнул правой кнопкой мыши, вместо того, где они фактически находятся. У меня включено управление версиями файлов, но последняя имеющаяся у меня резервная копия слишком далека от прошлого.

5 ответов5

4

Быстрый и грязный сценарий PowerShell, чтобы сделать то, что вам нужно, вам потребуется версия командной строки 7zip. Просто измените два пути в сценарии и попробуйте сначала, у меня нет возможности сделать это самостоятельно в данный момент.

$folderPath="X:\Test";

Get-ChildItem $folderPath -recurse | %{ 

    if($_.Name -match "^*.`.zip$")
    {
        $parent="$(Split-Path $_.FullName -Parent)";    
        write-host "Extracting $($_.FullName) to $parent"

        $arguments=@("e", "`"$($_.FullName)`"", "-o`"$($parent)`"");
        $ex = start-process -FilePath "`"C:\Path\To\7zip\7z.exe`"" -ArgumentList $arguments -wait -PassThru;

        if( $ex.ExitCode -eq 0)
        {
            write-host "Extraction successful, deleting $($_.FullName)"
            rmdir -Path $_.FullName -Force
        }
    }
}
1

Это можно запустить из командной строки:

for /r %f in (*.zip) do 7z x "%f" -o"%~pf" && del "%f"

Подробная информация о /r: https://ss64.com/nt/for_r.html

% ~ Pf раскрывается в путь (как указано в справке команды 'for': for /?).

0

Эта версия решает все проблемы с пробелами и помещает файлы в исходный каталог каждого архива:

set folderPath="N:\Private
for /f "usebackq delims=|" %%f in (`dir /s /b %folderPath%\*.zip"`) do "C:\Program Files\7-Zip\7z.exe" x "%%f" -aoa -o"%%~dpf" && del "%%f"
-1

используйте Winrar вместо 7ZIP , а затем выберите все ваши ZIP-файлы и щелкните правой кнопкой мыши, выберите Extract each archive to separate folder

это извлечет каждый почтовый индекс в их соответствующую папку, затем удалит все ZIP

-1

Следующее может быть запущено из командной строки Windows. При необходимости измените путь к исполняемому файлу 7-Zip.
set folderPath="X:\Test"
for /f %f in ('dir /s /b %folderPath%\*.zip') do "C:\Program Files\7-Zip\7z.exe" x %f -o%folderPath%\* && del /p %f

Удалите /p если вы не хотите получать запрос на удаление каждого zip-файла.

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