2
7z x d:\migration\mongo\mongodb.7z o:f:\data *.* -r

Я использую эту команду как часть пакета для извлечения содержимого файла 7z с одного диска (D) на другой (F). Структура папок важна, поэтому я использую команду x с рекурсией.

Предполагается, что содержимое архива распаковывается в f:\data .

На самом деле происходит распаковка содержимого в рабочий каталог каталога командного файла (f:\migration\). Указание рабочего каталога (-w: в команде не имеет никакого эффекта.

Как я могу заставить мою команду работать как задумано?

Я использую 7zip x64 9.22b на Windows Server 2012 R2.

Изменить: мой оригинальный вопрос отметил, что данные извлекались в двух местах одновременно. Как оказалось, это был не тот случай. Мой вопрос был обновлен, чтобы отразить это.

1 ответ1

4

Я использую 7za.exe (версия для командной строки), но то же самое относится и к 7z.exe. Внимательно посмотрите на справочное сообщение:

7-Zip (A) 9.20  Copyright (c) 1999-2010 Igor Pavlov  2010-11-18

Usage: 7za <command> [<switches>...] <archive_name> [<file_names>...]
       [<@listfiles...>]

<Commands>
  a: Add files to archive
  b: Benchmark
  d: Delete files from archive
  e: Extract files from archive (without using directory names)
  l: List contents of archive
  t: Test integrity of archive
  u: Update files to archive
  x: eXtract files with full paths

<Switches>
  -ai[r[-|0]]{@listfile|!wildcard}: Include archives
  -ax[r[-|0]]{@listfile|!wildcard}: eXclude archives
  -bd: Disable percentage indicator
  -i[r[-|0]]{@listfile|!wildcard}: Include filenames
  -m{Parameters}: set compression Method
  -o{Directory}: set Output directory
  -p{Password}: set Password
  -r[-|0]: Recurse subdirectories
  -scs{UTF-8 | WIN | DOS}: set charset for list files
  -sfx[{name}]: Create SFX archive
  -si[{name}]: read data from stdin
  -slt: show technical information for l (List) command
  -so: write data to stdout
  -ssc[-]: set sensitive case mode
  -ssw: compress shared files
  -t{Type}: Set type of archive
  -u[-][p#][q#][r#][x#][y#][z#][!newArchiveName]: Update options
  -v{Size}[b|k|m|g]: Create volumes
  -w[{path}]: assign Work directory. Empty path means a temporary directory
  -x[r[-|0]]]{@listfile|!wildcard}: eXclude filenames
  -y: assume Yes on all queries

Вы видите, как ясно сказано, что ключи -o и -w? Например, перед переключателями стоит дефис, но не команды. Кроме того, двоеточие не является частью самого переключателя. Если это так, то вы должны были бы аналогичным образом использовать x: вместо просто x для извлечения с путями. Следовательно, ваше странное использование o:<Path> и w:<Path> является причиной вашей головной боли.

Используйте что-то вроде этого для рекурсивного сжатия папки и сохранения относительных путей:

7za a -r Archive.7z C:\InputFolder

Используйте следующее для извлечения в определенный каталог:

7za x -oD:\OutputFolder Archive.7z

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

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