Пакетное архивирование нескольких папок с 7-zip в другой каталог

476
FOSSFreak

В отношении этой замечательной работы :

@echo off if [%1]==[] goto :eof :loop 7z a -tzip "%~1.zip" "%~1" shift if not [%1]==[] goto loop 

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

Мне удалось найти способ сделать это с помощью следующей командной строки:

for /d %X in (*) do "c:\Program Files\7-Zip\7z.exe" a -tzip "<destinationPath>\%X.zip" "%X\" 

Однако приведенный выше пакетный файл действительно пригодится, потому что я могу просто перенести на него столько папок, сколько у меня есть свободного места для хранения, затем переместить архивы и перейти к следующему пакету.

На винде тут кстати так что терпите меня.

0

1 ответ на вопрос

1
Worthwelle

Команда 7zв предоставленном вами пакетном файле использует полный путь к входному файлу для получения выходного файла.

Чтобы изменить это, вы можете изменить "%~1.zip"его, "<destinationPath>\%~nx1.zip"как показано ниже, или, "<destinationPath>\%~n1.zip"если вам не нужно, чтобы расширение исходного файла было в новом имени файла.

@echo off if [%1]==[] goto :eof :loop 7z a -tzip "<destinationPath>\%~nx1.zip" "%~1" shift if not [%1]==[] goto loop 

В целях разъяснения:

  • %~1 представляет полное имя пути первого ввода (например: C: \ my \ path \ text.txt)
  • %~n1 представляет имя файла только первого ввода (например, текст)
  • %~x1 представляет расширение только первого ввода (например: .txt)
  • Эти два объединены в %~nx1, который представляет имя файла и расширение первого ввода (например: test.txt)
Сенсационные! Где вы изучаете этот материал? Я искал повсюду. Есть определенное руководство по пакетным / cmd или что-то? FOSSFreak 6 лет назад 0
Я нашел [Rob Van Der Woude] (http://www.robvanderwoude.com/batchstart.php) и [SS64] (https://ss64.com/nt/) хорошими ссылками. Некоторые из этих команд также находятся в не интуитивно понятных местах. Информация в этом ответе содержится в команде [`FOR /?`](https://ss64.com/nt/for.html). Worthwelle 6 лет назад 1
Спасибо, я отметил эти ресурсы для будущих ссылок. FOSSFreak 6 лет назад 0