Це мої 5 центів на цю проблему: я створив наступний скрипт, щоб розпакувати всі файли.
Можливо, ви не вимагатимете - ви можете просто залишити ці рядки, якщо хочете:
- Тому що я планую видалити всі .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)";
}