Вопрос: Как обновить несколько сжатых файлов с помощью командной строки 7zip?


Мне нужно обновить файл «background.png» в сотни .zip-файлов в том же каталоге. Я пробовал следующую команду без успеха:

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

Я получаю сообщение об ошибке «невозможно открыть файл». Можно ли это сделать?


2
2018-04-11 13:10


Источник


Спасибо за ваши комментарии и не волнуйтесь, я буду продолжать, пока это не закончится. Единственная проблема заключается в том, что я нахожусь в другом часовом поясе, также я не очень хорошо знаком с этикетом в суперпользователе, и похоже, что мне все еще нужно получать некоторые привилегии, такие как пометить другого пользователя. - suciocerdo


Ответы:


Добавьте один конкретный файл в каждый zip-файл рекурсивно с помощью 7-Zip

Использовать Для / F и Dir с помощью /S /B /A-D переключается на итерацию по каждому zip-файлу один за другим рекурсивно из стартового каталога и обновляет каждый файл архива таким образом.

Заметка:  С помощью этого метода вы опустите и не 7-Zip  -r переключатель с параметром обновления.


Командная строка

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"

Пакетный сценарий

Заметка:  Вы можете установить значение SET Src= переменная, которая должна быть в папке с полным каталогом пути, которую вы хотите обновить zip-файлы в рекурсивно. Вы можете установить SET uFile= значение переменной - полный путь к файлу, который вы обновляете zip-файлы; файл обновления.

@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%"
)

Дополнительные ресурсы

  • Для / 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.
    

    Кроме того, замена переменных переменной FOR была   повышенная. Теперь вы можете использовать следующий необязательный синтаксис:

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

  • -u (Параметры обновления)

0
2018-04-11 13:28



Почему эхо включено? - Ultrasonic54321
Личные предпочтения ... и потому, что я классный !!! лол - Pimp Juice IT
Большое спасибо за скрипт. Я запускаю некоторые тесты и не обновляет содержимое zip-файлов, и пакет закрывается быстро, чтобы увидеть результат. Есть ли способ предотвратить закрытие командного окна? Кстати, zip-файлы не содержат никаких папок / подпапок, только файлы. - suciocerdo
update: Я запускаю несколько дополнительных тестов, и я заметил, что на самом деле пакет добавляет background.png к zip-файлам, но не обновляет их, если он уже существует. - suciocerdo
@PimpJuiceIT У меня такая же версия 7-zip 18.01 (x64). Я запускаю пакет в качестве администратора из папки 7zip, и получаю следующий результат: Обновление архива: C: \ Users \ xxx \ Desktop \ testzip \ archive 1.zip Храните старые данные в архиве: 1 папка, 3 файла, 39664 байты (39 KiB) Добавить новые данные в архив: 0 файлов, 0 байт Файлы, считанные с диска: 0 Размер архива: 12324 байта (13 KiB) Все в порядке - suciocerdo