
7z x d:\migration\mongo\mongodb.7z o:f:\data *.* -r
Estou usando este comando como parte de um lote para extrair o conteúdo de um arquivo 7z de uma unidade (D) para outra (F). A estrutura de pastas é importante, então estou usando o x
comando com recursão.
O que deveria acontecer é que o conteúdo do arquivo seja descompactado em arquivos f:\data
.
O que érealmente acontecendoé o conteúdo que está sendo descompactado no diretório de trabalho do arquivo em lote ( f:\migration\
). Especificar o diretório de trabalho ( -w:
) no comando não tem efeito.
Como posso fazer meu comando funcionar conforme planejado?
Estou usando 7zip x64 9.22b no Windows Server 2012 R2.
Editar: minha pergunta original observou que os dados estavam sendo extraídos para dois locais simultâneos. Acontece que não foi esse o caso. Minha pergunta foi atualizada para refletir isso.
Responder1
Estou usando 7za.exe (versão de linha de comando), mas o mesmo vale para 7z.exe. Dê uma olhada na mensagem de ajudacom cuidado:
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
Você vê como é claramente mencionado que os interruptores são -o
e -w
? Tipo, há umhífenprecedendo as opções, mas não os comandos. Também ocólonénãoparte do próprio switch. Se fosse, você deveria ter usado da mesma forma, x:
em vez de apenas x
extrair com caminhos. Conseqüentemente, seu uso estranho de o:<Path>
e w:<Path>
é a razão de suas dores de cabeça.
Use algo assim para compactar uma pasta recursivamente e armazenar caminhos relativos:
7za a -r Archive.7z C:\InputFolder
Use o seguinte para extrair para um diretório específico:
7za x -oD:\OutputFolder Archive.7z
Obviamente, se os nomes das suas pastas contiverem espaços, use aspas duplas.
Responder2
No meu caso, estava funcionando no CMD, mas não no Powershell. Citar o diretório de destino resolveu isso para mim.
O seguinte funciona no CMD, mas não no Powershell
7z x d:\migration\mongo\mongodb.7z -of:\data *.* -r
O seguinte funciona em ambos
7z x d:\migration\mongo\mongodb.7z -o"f:\data" *.* -r