2013-12-17 80 views
2

我知道如何存檔文件或使用7zip(在Windows中)提取。我知道WinRAR工具可以存檔來自其他檔案的文件。像如何使用7zip直接爲.7z存檔文件而不提取?

winrar -a dest_archive.rar origin_archive.zip/toto.txt 

這似乎不可能與7z。目前,這裏是我想要

"C:\Program Files\7-Zip\7z" a "toto.zip" tata.7z\tata.txt 

我知道我可以提取出完整的存檔(連同「E」選項),然後將其存檔文件,我想,但這提取操作是太多了。

+0

我很抱歉,但你不是很清楚,'a'添加文件到7z文件,所以它應該工作。如果它沒有提供更多的細節什麼不起作用 – nrathaus

+1

這聽起來像你想從一個檔案(.7z)移動到另一個(.7z)文件。那是對的嗎?如果是這樣,我不認爲7-Zip在本地執行該操作。看來7-Zip一次只能在一個存檔上運行。我懷疑WinRAR似乎只是隱藏了將文件解壓到臨時位置,然後將其添加到另一個壓縮文件,然後將其刪除的事實。但是,這不應該太難以自動化。 – mojo

+0

是的,這是我想要做的:將文件從一個存檔移動到另一個(至少在沒有臨時提取的內存中)。但正如下面所說,7zip本身不可能。 – OranginaRouge

回答

1

7-zip不提供此功能。你必須自己做。 這是一個快速演示。相對文件路徑(源文件中爲.7z)是第一個參數。其他參數是7-Zip存檔(來源,然後dest)。這個解決方案

SETLOCAL 

SET "FILE_TO_MOVE=%~1" 
SET "SOURCE_ARCHIVE=%~2" 
SET "TARGET_ARCHIVE=%~3" 

ECHO File: %FILE_TO_MOVE% 
ECHO Source: %SOURCE_ARCHIVE% 
ECHO Target: %TARGET_ARCHIVE% 

SET "TEMP_DIR=%TEMP%\7z_temp_%RANDOM%" 
IF EXIST "%TEMP_DIR%" RMDIR /S /Q "%TEMP_DIR%" 
MKDIR "%TEMP_DIR%" 

@ECHO Before copy... 
7z.exe l "%TARGET_ARCHIVE% 

7z.exe x -o"%TEMP_DIR%" "%SOURCE_ARCHIVE%" "%FILE_TO_MOVE%" 
pushd "%TEMP_DIR%" 
7z.exe a "%TARGET_ARCHIVE%" "%FILE_TO_MOVE%" 
popd 
RMDIR /S /Q "%TEMP_DIR%" 

@ECHO After copy... 
7z.exe l "%TARGET_ARCHIVE% 

一個特殊之處是,則目標將可能需要一個完全合格的路徑(因爲你指的是之前改變到不同的目錄)。由於我不知道你打算如何執行這個操作,所以我不能提出一個更好的解決方案來指定絕對路徑。

+0

這個問題要求「不提取」 - 這個例子提取。 –

+1

「沒有提取它」實際上是無意義的。它幾乎肯定會在幕後提取出來,即使該程序是爲你做的,並沒有這樣說。我提出這是一個解決不可能問題的可行解決方案(請參閱我對該問題的評論)。 – mojo

+0

Jubjub:那麼正確的答案是「你不能這樣做」,而不是「這是一個答案,它做了你明確要求不要做的事情」。即使這些位是通過下面的Winrar示例獲取的,它們可能不會佔用與存檔中存儲的數據大小成正比的空間,也不會將提取的位寫入磁盤(都可能發生在內存中) 。 –

1

你可以進入暴露的概念最接近的是

7z e -so tata.7z tata.txt | 7z a -sitata.txt toto.7z 

這將提取tata.txt從源文件,輸出發送到標準輸出,並重新壓縮到目標文件從標準輸入讀取。

但是文件需要解壓/重新壓縮。

似乎.zip界面與這種操作不兼容。 7z,bzip2,gzip工作沒有問題。

相關問題