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

@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\"

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

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

1 ответ1

1

Команда 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)

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