我搞错了我使用的备份软件的一个设置。通常我会将网络共享中的文件加载到备用驱动器中,压缩到 zip 文件夹中,然后发送到异地集线器。
相反,压缩是先发生的,所以现在我有一个充满原始目录的网络共享,但是所有文件都被压缩到它们自己的 zip 文件夹中。
有没有一种快速的方法可以解压服务器上的所有 zip 文件夹,然后删除 ZIP 文件?我有 7-zip,它似乎可以完成这项工作。
到目前为止我尝试过的:
我搜索了 ZIP 文件,然后从 7zip 菜单中选择了“在此提取”,但这样会将 ZIP 文件提取到我右键点击的文件夹中,而不是它们实际所在的位置。我已打开文件版本控制,但我拥有的最新备份太久远了。
答案1
一个快速而简单的 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
}
}
}
答案2
这可以在命令行上运行:
for /r %f in (*.zip) do 7z x "%f" -o"%~pf" && del "%f"
/r 的详细信息:https://ss64.com/nt/for_r.html
%~pf 扩展为路径(如‘for’命令帮助中所述:for /?)。
答案3
此版本解决了所有与空格有关的问题,并将文件放入每个档案的源目录中:
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"
答案4
使用Winrar
而不是7ZIP
,然后选择所有 zip 文件,并右键单击,选择Extract each archive to separate folder
这会将每个 zip 文件解压到各自的文件夹中,然后删除所有 ZIP 文件