5

Я пытаюсь создать 7-Zip архив, который бы сжимал определенную папку (только указанную!) исключая определенное расширение файла. Я придумал это:

"PATH-TO-7Z.EXE" a archive.7z "C:\tools\" -t7z -mx=9 -mhe=on -mtc=on -sccUTF-8 -scsUTF-8 -ssc- -ssw -y -slp -r -x!*.avi

Однако он сканирует весь диск c, ищет инструменты (C:\tools\ указан в качестве цели в приведенном выше примере) в качестве ключевого слова и добавляет все, что находит, в мой архив.

Есть ли способ избежать этого? Значение ТОЛЬКО для архивации C:\tools\ , исключая указанные расширения.

Я думаю, что это что-то с опцией -r , но я не уверен что.

2 ответа2

3

7-Zip поиск на основе текущего каталога. Этот бит информации явно не задокументирован, но он подразумевается в справке для команды Add:

cd /D c:\dir1\
7z a c:\archive3.zip dir2\dir3\ 

Имена файлов в архиве c:\ archive3.zip будут содержать префикс dir2\ dir3\, но они не будут содержать префикс c:\ dir1\.

Вам нужно изменить текущий каталог перед запуском 7-zip, чтобы ваша команда выглядела так:

pushd "C:\Tools" & C:\Path\To\7z.exe a -r -x!*.avi archive.7z * & popd

Вы также можете разбить эту строку на 3 строки, если хотите.

Также отметим, что у вас есть много ненужных опций в командной строке:

  • -ssc-: по умолчанию в системе Windows
  • -t7z: требуется только в том случае, если тип архива не может быть определен по расширению (например, -tzip должен быть указан, если вы хотите создать файл .xpi )
  • -mhe=on: вам нужно перепроверить, но я не думаю, что шифрование заголовка что-то делает с незашифрованным архивом.
  • -scsUTF-8: настройка по умолчанию
  • -sccUTF-8: Требуется только в том случае, если вы хотите прочитать вывод консоли (или перенаправить в файл) и вам действительно нужен UTF-8 для этой конкретной цели
  • -y: вообще не работает с командой Add (только -e или -x ).
  • -ssw: Если вы считаете, что вам это нужно, вы должны посмотреть на работу со снимком VSS, чтобы убедиться, что вы получаете непротиворечивую копию файла, который читается. Если это используется с конкретным приложением, поведение которого вы протестировали, то вы можете игнорировать этот пункт
  • -slp: убедитесь, что вы прочитали справку и поняли как требования, так и эффекты этого параметра, а также протестировали его, чтобы убедиться, что он не оказывает негативного влияния на вашу среду.
0

Да, опция -r не обязательно делает то, что вы ожидаете. Теперь это упоминается в FAQ: Почему ключ -r не работает должным образом?:

Почему ключ -r не работает должным образом?

В большинстве случаев вам не нужен ключ -r. 7-Zip может сжимать подпапки даже без ключа -r.

Пример 1:

7z.exe ac:\ a.7z «C:\ Program Files» полностью сжимает «C:\ Program Files», включая все подпапки.

Пример 2:

7z.exe a -rc:\ a.7z «C:\ Program Files» ищет и сжимает "Program Files" во всех подпапках C:\ (например, в «C:\ WINDOWS»).

Если вам нужно сжать только файлы с некоторым расширением, вы можете использовать ключ -r: 7z a -rc:\ a.zip c:\ dir * .txt сжимает все * .txt файлы из папки c:\ dir\ и все это вложенные папки.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .