Сделайте, чтобы PowerShell архивировал содержание набора папок, отдельного zip-файла для каждой папки

Я был бы, чтобы сделать, чтобы PowerShell архивировал содержание набора папок и получил отдельный zip-файл для каждой папки. Недавно, я спросил, как сделать, это с .bat файлом и ответом было обеспечено.

for /D %%d in (*.*) do "C:\Program Files\7-Zip\7z\7za.exe" a -tzip %%d.zip %%d

Однако это оказалось полезным только для папок, которые не имеют никаких пробелов на их имя. Так как причиной будет тот пакет, сделает следующее: если имя папки будет "изображениями отпуска Jeff", то переменные будут:

%%d = Jeff's<br>
%%e = vacation<br>
%%f = pictures<br>

И затем это пытается передать только %%d к программе С 7 zip, которая не найдет такую папку и поэтому не создаст zip-файл.

Я попытался искать некоторые учебные руководства, сайты документации и такой, но я не смог придумать ответ. Может быть ответ, но я хочу воспользоваться этой возможностью, чтобы попробовать мои силы в PowerShell.

Я думал, что функция с одним аргументом, что, будучи родительской папкой подпапок, которые должны быть заархивированы, была бы лучшим подходом.

Таким образом, вот то, что я имею, который не работает, вероятно, из-за моей общей неопытности с PowerShell:

function zipFolders($parent) {
    $zip = "C:\Program Files\7-Zip\7z\7za.exe";
    $parents | ForEach-Object $zip a -tzip
}
3
задан 20.03.2017, 12:16

1 ответ

Необходимо дать С 7 zip имя выходного файла и название входного каталога для него для работы. Вы также хотите звонить, Заставляют-ChildItem (dir) на Вашем родительском пути получать его подпути.

Следующий отрывок должен поместить каждую подпапку $rootFolder в макс. zip-файл сжатия, названный в честь подпапки в текущем пути.

dir $rootFolder | Where-Object { $_.PSIsContainer } | ForEach-Object { C:\"Program Files"\7-zip\7z.exe a -mx9 "$_.zip" $_.FullName }
4
ответ дан 08.12.2019, 00:38

Теги

Похожие вопросы