Вот мои 5 центов на эту проблему: я создал следующий скрипт, чтобы рекурсивно распаковать все .7z и все .zip файлы в структуре моей папки.
Возможно, вам это не понадобится - поэтому вы можете просто удалить эти строки, если хотите:- Поскольку я планирую удалить все файлы .7z и .zip после извлечения, я создал файл cleanup.ps1 (я не удалил архивы сразу по соображениям безопасности).
- В случае каких-либо ошибок извлечения я поместил команды извлечения в файл ExecUnpack.ps1, чтобы иметь возможность снова извлечь один архив
del "Cleanup.ps1";
del "ExecUnpack.ps1";
del "ExecUnpack.cmd";
get-childitem . -recurse -include @("*.7z","*.zip") | foreach {
"""C:\Program Files\7-Zip\7z.exe"" x ""$($_.FullName)"" -y -o""$($_.FullName.Replace(" .7z", "\").Replace(".7z", "\").Replace(" .zip", "\").Replace(".zip", "\"))""" | Out-File -Append "ExecUnpack.ps1"
"""C:\Program Files\7-Zip\7z.exe"" x ""$($_.FullName)"" -y -o""$($_.FullName.Replace(" .7z", "\").Replace(".7z", "\").Replace(" .zip", "\").Replace(".zip", "\"))""" | Out-File -Append "ExecUnpack.cmd"
$proc=[System.Diagnostics.Process]::Start("C:\Program Files\7-Zip\7z.exe", "x ""$($_.FullName)"" -y -o""$($_.FullName.Replace(" .7z", "\").Replace(".7z", "\").Replace(" .zip", "\").Replace(".zip", "\"))""");
$proc.WaitForExit();
echo "ExitCode=$($proc.ExitCode.ToString()) - $($_.FullName)";
"#ExitCode=$($proc.ExitCode.ToString()) - $($_.FullName)" | Out-File -Append "Cleanup.ps1";
"del ""$($_.FullName)""" | Out-File -Append "Cleanup.ps1";
}
Где это основная часть:
get-childitem . -recurse -include @("*.7z","*.zip") | foreach {
$proc=[System.Diagnostics.Process]::Start("C:\Program Files\7-Zip\7z.exe", "x ""$($_.FullName)"" -y -o""$($_.FullName.Replace(" .7z", "\").Replace(".7z", "\").Replace(" .zip", "\").Replace(".zip", "\"))""");
$proc.WaitForExit();
echo "ExitCode=$($proc.ExitCode.ToString()) - $($_.FullName)";
}