web-dev-qa-db-ja.com

ファイルが存在する場所でファイルを再帰的に解凍してから、アーカイブを削除します

使用しているバックアップソフトウェアの設定を間違えました。通常、ネットワーク共有からのファイルをスペアドライブにロードし、Zipフォルダーに圧縮してから、オフサイトハブに送信します。

代わりに、最初に圧縮が行われたため、元のディレクトリでいっぱいのネット​​ワーク共有ができましたが、すべてのファイルが独自のZipフォルダーに圧縮されています。

サーバー上のすべてのZipフォルダーを解凍してからZipファイルを削除する簡単な方法はありますか?私は7-Zipを持っていますが、それでうまくいくようです。

これまでに試したこと

Zipファイルを検索し、7Zipメニューから[ここに抽出]を選択しましたが、実際に存在する場所ではなく、たまたま右クリックしたフォルダにZipファイルが抽出されます。ファイルのバージョン管理をオンにしていますが、最新のバックアップは過去のものです。

5
user201262

必要なことを実行するための迅速で汚いPowerShellスクリプトには、7Zipコマンドラインバージョンが必要です。 sriptの2つのパスを変更し、最初にテストするだけです。現時点では、自分で変更する機会はありません。

$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
        }
    }
}
4
Martin

これはコマンドラインで実行できます。

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

/ rの詳細: https://ss64.com/nt/for_r.html

%〜pfはパスに展開されます(「for」コマンドヘルプ:for /?に記載されています)。

1
Hermolaou

このバージョンでは、スペースに関するすべての問題が解決され、各アーカイブのソースディレクトリにファイルが配置されます。

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"
0
Rualark