Eu gostaria que o PowerShell compactasse o conteúdo de várias pastas e obtivesse um arquivo ZIP individual para cada pasta. Recentemente, eu perguntei como fazer isso com um arquivo .bat e uma resposta foi fornecida.
for /D %%d in (*.*) do "C:\Program Files-Zipzza.exe" a -tzip %%d.zip %%d
No entanto, isso se mostrou útil apenas para pastas que não possuem espaços em seus nomes. A razão disso é que o lote fará o seguinte: se o nome da pasta for "fotos de férias de Jeff", as variáveis serão:
%%d = Jeff's<br>
%%e = vacation<br>
%%f = pictures<br>
E, em seguida, ele tenta passar apenas %%d
para o programa 7-Zip, que não encontrará essa pasta e, portanto, não criará um arquivo ZIP.
Eu tentei procurar alguns tutoriais, sites de documentação e tal, mas não consegui encontrar uma resposta. Pode haver uma resposta, mas quero aproveitar esta oportunidade para tentar minha mão no PowerShell.
Eu estava pensando que uma função com um argumento, que é a pasta pai das sub-pastas que precisam ser compactadas, seria a melhor abordagem.
Então, aqui está o que eu tenho, o que não funciona, provavelmente devido à minha inexperiência geral com o PowerShell:
function zipFolders($parent) {
$zip = "C:\Program Files-Zipzza.exe";
$parents | ForEach-Object $zip a -tzip
}