Comando de compressão integrado do Windows sem utilizar ferramentas externas

1

Eu quero um comando / script de compactação e arquivamento de linha de comando do Windows (7 em diante), que não exija ferramentas ou utilitários externos, incluindo o PowerShell, pois não sou muito do criador de scripts do Windows. Deve ser totalmente independente, como os comandos zip / tar do Unix / Linux.

Eu procurei muito por esse tipo de comando ou script, mas ainda não encontrei nenhum. Alguém encontrou algo assim?

    
por Vicky Dev 04.08.2017 / 19:08

2 respostas

0

Você não precisa ser um especialista em scripts para utilizar o PowerShell e não precisa utilizar um script PowerShell explícito (ou sua interface IDE) para usar Comandos PowerShell - você pode utilizar comandos PowerShell e torná-los parte da lógica do script em lote para executar e usar.

Acho que você está procurando uma maneira nativa do Windows para concluir a tarefa e deseja apenas garantir que ela seja realmente nativa do Windows e funcione de < strong> Windows 7 e acima (mais recente).

Compactando e arquivando

Eu criei um script em lote abaixo que funciona no Windows 10 e Windows 7 e usa uma lógica que funciona em versões mais antigas do PowerShell bem como versões mais recentes apenas no caso de eu usar lógica mais antiga.

Drag and Drop

Just drag the folder you wish to compress to the batch script and it'll be archived as a zip file and it will create the new zip file in that same location but with the <foldername you archive>.zip so if you drag C:\User\User\Desktop\New Folder into the script, it will create C:\User\User\Desktop\New Folder.zip

Drag folder to script

enter image description here

Created afterwards

enter image description here

O script

Observação: deixei duas variáveis no script comentadas no início para que você possa usá-las e definir explicitamente a pasta de origem e o nome do arquivo de destino desejo em vez de usar o método de arrastar e soltar.

Link de origem para a ideia lógica do PowerShell

@ECHO ON

::SET src_folder=C:\Users\User\Desktop\Test
::SET destfile=C:\Users\User\Desktop\Test.zip

SET src_folder=%~1
SET destfile=%~FN1.zip

:DynamicPSScriptBuild
SET PSScript=%temp%\%~n0.ps1
IF EXIST "%PSScript%" DEL /Q /F "%PSScript%"
ECHO [Reflection.Assembly]::LoadWithPartialName("System.IO.Compression.FileSystem")>>"%PSScript%" 
ECHO $compressionLevel = [System.IO.Compression.CompressionLevel]::Optimal         >>"%PSScript%" 
ECHO $includebasedir = $true                                                       >>"%PSScript%" 
ECHO [System.IO.Compression.ZipFile]::CreateFromDirectory("%src_folder%", "%destfile%", $compressionLevel, $includebasedir)>>"%PSScript%" 

:PowerShell
SET PowerShellDir=C:\Windows\System32\WindowsPowerShell\v1.0
CD /D "%PowerShellDir%"
Powershell -ExecutionPolicy Bypass -Command "& '%PSScript%'"

EXIT

Descompactando e Extraindo

Eu também criei um script em lote abaixo que funciona no Windows 10 e Windows 7 e usa lógica que funciona em versões mais antigas do PowerShell, além de versões mais recentes no caso eu usei lógica mais antiga.

Drag and Drop

Just drag the zip file want to decompress into the script and it will extract the contents of the file to the same folder as the zip file you dragged into the script resides. So if you have C:\User\User\Desktop\ZipMe.zip and it contains a folder named ZipMe, once you drag and drop it into the script, it will extract the folder ZipMe to C:\User\User\Desktop.

Drag the zip file to the script

enter image description here

Extracted afterwards

enter image description here

O script

Importante: a variável no compactação e arquivamento do script acima (o primeiro script no topo) mostrado como $includebasedir = $true diz para zipar a pasta atual e o conteúdo dentro dela. Se esse valor foi definido como $false ou se você extrair de um zip que não contém a pasta, o script abaixo extrairá todos os arquivos e outros conteúdos para a mesma pasta em que reside o arquivo zip - assim, 100 arquivos e pastas ser extraído se o arquivo zip não contiver nenhuma pasta pai contida no arquivo.

Observação: deixei duas variáveis no script comentadas no início para que você possa usá-las e definir explicitamente a pasta de destino e o nome do arquivo zip desejo em vez de usar o método de arrastar e soltar.

@ECHO ON

::SET dest_folder=C:\Users\User\Desktop\New folder
::SET zip_file=C:\Users\User\Desktop\Test\test.zip

SET dest_folder=%~DP1
SET zip_file=%~1

:DynamicPSScriptBuild
SET PSScript=%temp%\%~n0.ps1
IF EXIST "%PSScript%" DEL /Q /F "%PSScript%"
ECHO [Reflection.Assembly]::LoadWithPartialName("System.IO.Compression.Filesystem")>>"%PSScript%" 
ECHO [io.compression.zipfile]::ExtractToDirectory("%zip_file%", "%dest_folder%")   >>"%PSScript%" 

:PowerShell
SET PowerShellDir=C:\Windows\System32\WindowsPowerShell\v1.0
CD /D "%PowerShellDir%"
Powershell -ExecutionPolicy Bypass -Command "& '%PSScript%'"

GOTO :EOF

Mais recursos

por 05.08.2017 / 14:13
1

Pelo menos o Windows 7 (e o XP ... ainda não tenho tanta certeza sobre o estado do Windows 10) não tem uma interface de linha de comando para trabalhar com o suporte a compactação ZIP fornecido por "Microsoft Compressed Folders" suporte (como o que o Explorer pode usar).

No entanto, você pode fazer isso simplesmente criando um arquivo de script e usando o Windows Script Host, que é incorporado no Windows XP e posterior (como é o suporte "Microsoft Compressed Folders").

Por exemplo, a resposta de Peter Mortensen mostra o conteúdo de um arquivo de lote que pode ser feito, que grava 8 linhas de VBScript que, em seguida, utilizam o suporte "Microsoft Compressed Folders".

Observe que o "sleep 2000" no final apenas pausa 2 segundos e não é tão seguro quanto a uma abordagem como George Abordagem do Yockey (verificando se há compactação ativa) ou verificando o .Count (algo como envio do kayleeFrye_onDeck ).

Não tenho certeza se uma resposta baseada no WSH viola as metas que você pretendia quando disse que não queria o PowerShell, mas que de fato não usa o PowerShell.

    
por 05.08.2017 / 18:42