
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
Я использую 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
Разумеется, если в именах ваших папок есть пробелы, используйте двойные кавычки.
решение2
В моем случае это работало в CMD, но не в Powershell. Указание в кавычках целевого каталога решило проблему для меня.
Следующее работает в CMD, но не в Powershell
7z x d:\migration\mongo\mongodb.7z -of:\data *.* -r
Следующее работает в обоих вариантах
7z x d:\migration\mongo\mongodb.7z -o"f:\data" *.* -r