Старый вопрос, но я боролся с ним сегодня, так что вот мой 2с. Средство командной строки 7zip "7z.exe" (у меня установлена версия 9.22) может записывать в стандартный вывод и читать из стандартного ввода, так что вы можете обойтись без промежуточного файла tar с помощью канала:
7z x "somename.tar.gz" -so | 7z x -aoa -si -ttar -o"somename"
Где:
x = Extract with full paths command
-so = write to stdout switch
-si = read from stdin switch
-aoa = Overwrite all existing files without prompt.
-ttar = Treat the stdin byte stream as a TAR file
-o = output directory
См. Файл справки (7-zip.chm) в каталоге установки для получения дополнительной информации о командах и переключателях командной строки.
Как отметили от @ zespri powershell, буферизует входные данные для второго процесса 7z, поэтому может занимать много памяти, если ваш tar-файл большой. то есть:
& 7z x "somename.tar.gz" -so | & 7z x -aoa -si -ttar -o"somename"
Обходной путь из этого SO ответа Если вы хотите сделать это из powershell, это передать команды cmd.exe:
& cmd.exe '/C 7z x "somename.tar.gz" -so | 7z x -aoa -si -ttar -o"somename"'