使用しているバックアップソフトウェアの設定を間違えました。通常、ネットワーク共有からのファイルをスペアドライブにロードし、Zipフォルダーに圧縮してから、オフサイトハブに送信します。
代わりに、最初に圧縮が行われたため、元のディレクトリでいっぱいのネットワーク共有ができましたが、すべてのファイルが独自のZipフォルダーに圧縮されています。
サーバー上のすべてのZipフォルダーを解凍してからZipファイルを削除する簡単な方法はありますか?私は7-Zipを持っていますが、それでうまくいくようです。
これまでに試したこと:
Zipファイルを検索し、7Zipメニューから[ここに抽出]を選択しましたが、実際に存在する場所ではなく、たまたま右クリックしたフォルダにZipファイルが抽出されます。ファイルのバージョン管理をオンにしていますが、最新のバックアップは過去のものです。
必要なことを実行するための迅速で汚い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
}
}
}
これはコマンドラインで実行できます。
for /r %f in (*.Zip) do 7z x "%f" -o"%~pf" && del "%f"
/ rの詳細: https://ss64.com/nt/for_r.html
%〜pfはパスに展開されます(「for」コマンドヘルプ:for /?に記載されています)。
このバージョンでは、スペースに関するすべての問題が解決され、各アーカイブのソースディレクトリにファイルが配置されます。
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"