Faça com que o PowerShell feche o conteúdo de um grupo de pastas, um arquivo ZIP individual para cada pasta

3

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
}
    
por KdgDev 29.01.2010 / 18:33

1 resposta

4

Você precisa dar ao 7-Zip um nome de arquivo de saída e o nome do diretório de entrada para que ele funcione. Você também deseja chamar Get-ChildItem (dir) em seu caminho pai para obter seus subcaminhos.

O snippet a seguir deve colocar cada subpasta de $rootFolder em um arquivo ZIP de compactação máxima com o nome da subpasta no caminho atual.

dir $rootFolder | Where-Object { $_.PSIsContainer } | ForEach-Object { C:\"Program Files"-zipz.exe a -mx9 "$_.zip" $_.FullName }
    
por 22.02.2010 / 23:37