Я бы хотел, чтобы PowerShell архивировал содержимое нескольких папок и получал отдельный ZIP-файл для каждой папки. Недавно я спросил, как это сделать с помощью файла .bat, и я получил ответ.
for /D %%d in (*.*) do "C:\Program Files\7-Zip\7z\7za.exe" a -tzip %%d.zip %%d
Однако это оказалось полезным только для папок, в имени которых нет пробелов. Причина в том, что пакет будет делать следующее: если имя папки «Джефф в отпуск», переменные будут:
%%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
}