Создайте 7-Zip, включающий только указанную папку и исключающий определенные расширения. Нет сканирования

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варианте, но я не уверен, что.

Amore
источник
Просто удалите опцию -r. sourceforge.net/p/sevenzip/discussion/45797/thread/067f93d1
EMBarbosa

Ответы:

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Убедитесь, что вы прочитали справку и поняли требования и эффекты этого параметра, а также протестировали его, чтобы убедиться, что он не оказывает негативного влияния на вашу среду.
afrazier
источник
Огромное спасибо! Работает как шарм! Одна вещь, однако, создает архив в папке, которую я хочу заархивировать (в моем примере это будет C: \ tools). Можно ли немного подправить его, чтобы он создавал результирующий архив либо там, где находится исходный файл bat (строка запускается из простого .bat), либо в произвольном месте? Но в любом случае, большое спасибо еще раз !!
Amore
Для пользовательского расположения архива все, что вам нужно сделать, это указать полный путь (например, C:\Where\Backups\Go\Archive.7z), а не просто Archive.7z. Чтобы поместить архив в то же место, что и скрипт, %~dp0\Archive.7zдолжен работать.
Размолаживаем
afrazier, спасибо тебе большое! Это работает как шарм, и вы абсолютный спаситель жизни! Я очень, очень обязан !!!
Amore
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 \ и все это вложенные папки.

noelicus
источник