Questão Como atualizar vários arquivos compactados com a linha de comando 7zip?


Eu preciso atualizar o arquivo "background.png" em centenas de arquivos .zip no mesmo diretório. Eu tentei o seguinte comando sem sucesso:

7z u -r "C:\Users\xxx\Desktop\testzip\*.zip" "C:\Users\xxx\Desktop\testzip\background.png"

Eu recebo o erro "não é possível abrir o arquivo". É possível fazê-lo?


2


origem


Obrigado por seus comentários e não se preocupe, vou continuar até que isso seja concluído. O único problema é que eu estou em um fuso horário diferente, também não estou muito familiarizado com a etiqueta no superusuário e parece que ainda preciso ganhar alguns privilégios, como sinalizar outro usuário. - suciocerdo


Respostas:


Adicione um arquivo específico para cada arquivo zip recursivamente com 7-Zip

Use um Para / F loop e o Dir comando usando o /S /B /A-D alterna para iterar cada arquivo zip, um por um, recursivamente a partir do diretório inicial, e atualiza cada arquivo morto dessa maneira.

Nota:  Com este método você irá omitir e não usar o 7-Zip  -r alternar com o parâmetro de atualização.


Linha de comando

FOR /F "TOKENS=*" %A in ('DIR /S /B /A-D "C:\Users\xxx\Desktop\testzip\*.zip"') DO 7z u "%~fA" "C:\Users\xxx\Desktop\testzip\background.png"

Script em lote

Nota:  Você pode definir o valor do SET Src= variável para ser a pasta inicial do caminho completo que você deseja atualizar arquivos zip dentro recursivamente. Você pode definir o SET uFile= valor da variável para ser o caminho completo do arquivo com o qual você está atualizando os arquivos zip; o arquivo de atualização.

@ECHO ON

SET Src=C:\Users\xxx\Desktop\testzip
SET uFile=C:\Users\xxx\Desktop\testzip\background.png

FOR /F "TOKENS=*" %%A in ('DIR /S /B /A-D "%Src%\*.zip"') DO (
    7z u "%%~fA" "%uFile%"
)

Mais recursos

  • Para / F
  • FOR /?

        tokens=x,y,m-n  - specifies which tokens from each line are to
                          be passed to the for body for each iteration.
                          This will cause additional variable names to
                          be allocated.  The m-n form is a range,
                          specifying the mth through the nth tokens.  If
                          the last character in the tokens= string is an
                          asterisk, then an additional variable is
                          allocated and receives the remaining text on
                          the line after the last token parsed.
    

    Além disso, a substituição de referências de variáveis ​​FOR foi   melhorada. Agora você pode usar a seguinte sintaxe opcional:

    %~fI        - expands %I to a fully qualified path name
    
  • Dir

  • -u (opções de atualização)

0



Por que o eco está ligado? - Ultrasonic54321
Preferência pessoal ... e porque eu sou legal !!! RI MUITO - Pimp Juice IT
Muito obrigado pelo roteiro. Eu corro alguns testes e ele não atualiza o conteúdo dos arquivos zip e o lote fecha rapidamente para ver o resultado. Existe uma maneira de impedir que a janela de comando seja fechada? By the way, os arquivos zip não contêm quaisquer pastas / subpastas, apenas arquivos. - suciocerdo
update: Eu corro alguns testes extras e notei que na verdade o lote está adicionando o background.png aos arquivos zip mas não os atualizando se já existirem. - suciocerdo
@PimpJuiceIT Eu tenho a mesma versão 7-zip 18.01 (x64). Eu estou executando o lote como um administrador da pasta 7zip e recebo o seguinte resultado: Atualizando o arquivo: C: \ Usuários \ xxx \ Desktop \ testzip \ archive 1.zip Manter dados antigos no arquivo: 1 pasta, 3 arquivos, 39664 bytes (39 KiB) Adicionar novos dados ao arquivo: 0 arquivos, 0 bytes Arquivos lidos do disco: 0 Tamanho do arquivo: 12324 bytes (13 KiB) Tudo está OK - suciocerdo