7-Zipコマンドラインを使用してサブディレクトリでアーカイブするにはどうすればよいですか?または、アーカイブ中にフォルダ構造をどのように保持しますか?


16

私はこのようなファイルがたくさんあります:

C:\G\G1\35antique-shop.mp3
C:\G\G2\35antique-shop.mp3
C:\G\G1\09saguri.mp3
C:\G\G2\09saguri.mp3

アーカイブ中にフォルダ構造を維持する方法を知りたいだけです。これは重複するものよりも重要であり、それを解決する方法を知ることはボーナスになるでしょう。

@Lamb "G1およびG2フォルダーから選択したファイルのみ(フォルダー全体ではなく)をアーカイブしますか?"

それはほとんどすべてを語っていますが、私は改善しようとします:選択したファイルのみをアーカイブに移動したいだけではありません。各ファイルへのパス名を含む、これらのファイルのリストもあります。

したがって、SubDir1には10個のファイルがあり、そのうち3個を圧縮したい場合があり、SubDir1 \ sub2には5個のファイルがあり、そのうち5個すべてを圧縮したい場合があります。アーカイブする必要のあるファイルはリストファイルにあります。

ファイルが重複している可能性があるので、サブディレクトリを追加すると、7-Zipはそれらを重複として認識しないことを願っています。

そして、私はそれをコマンドラインで行うのが好きです。

私はこのようなバッチファイルを試しました:

7z a -r MyArchive.7z C:\G\G1\35antique-shop.mp3
7z a -r MyArchive.7z C:\G\G2\35antique-shop.mp3
7z a -r MyArchive.7z C:\G\G1\09saguri.mp3
7z a -r MyArchive.7z C:\G\G2\09saguri.mp3

これは、01antique-shop.mp3、02antique-shop.mp3、...、33antique-shop.mp3および34antique-shop.mp3までのファイルはアーカイブしないでください。

フォルダ名(=サブディレクトリ)はMyArchive.7zに追加されていません。これが問題です。

明らかに、リストファイルでコマンドを1つだけ使用したいのですが、それも機能しません。

私はもう試した:

7z a -mx0 -tzip C:\$$-edrive\F-G-H.zip @fgh.txt

これは実際には選択に関してはかなりうまく機能しますが、ディレクトリ構造は保持されません。悲しいことに。

どうすればよいですか?


G1およびG2フォルダーから選択したファイルのみ(フォルダー全体ではなく)をアーカイブしますか?
Ankit

回答:


12

7-Zipの最新の安定バージョン(15.14)には、絶対パスストレージを有効にするスイッチ-spfがあります。

たとえば、ファイルlist.txt

C:\tmp\dir1\file.txt
C:\tmp\dir2\file.txt

このコマンド7z a p.7z -spf @list.txtは、リストにあるとおりの絶対パスを格納するアーカイブを作成します。または、コマンド7z a p.7z -spf2 @list.txtはドライブ文字を削除します。

tmp\dir1\file.txt
tmp\dir2\file.txt

ファイルlist.txt

dir1\file.txt
dir2\file.txt

このコマンド7z a p.7z @list.txtは、バージョン9.20と15.14の両方で、リストにあるように相対パスを保存します。

スイッチ-spfを使用してさらにテストを行いました。結果はこちら


私はこのアイデアを1日探していました。ありがとう!
Moshe L

9

以下を使用して、サブディレクトリのあるディレクトリアーカイブしました。

7z.exe a - t7z NewArchivePath PathOfFolderToArchive

7zA.exeへの直接リンクがどこにも(リンクごとに)見つかりません。これは廃止され、7z.exeに置き換えられましたか?
PrincessPooleRulz

@ user194767:7za.exeはコマンドラインバージョンです。
Karan 2013

そして、私はそれを使いたいのですが、そのページ7-zip.org/download.htmlでそのようなものを見つけることができません。だから、ただ明確にすること:を「7zA.exeのどこかへの直接リンクを見つけることができません」私は本当に意味を:「私は、このフリーソフトウェアへの直接リンクを与えてください!」ありがとうございました!
PrincessPooleRulz

1
@ user194767:[OK]を、ここにある、現在のバージョンがありますが、あなたは見つけることができなかった私に言っている7 -ジップコマンドラインバージョンをそのページ上の任意の場所!
カラン2013

7zA.exeができなかったので、7z.exeを使用してみましたが、うまくいきました。-rフラグの用途はわかりませんが、サブディレクトリをアーカイブする必要はありません。
エリックローパー2013

7

代わりにこれを試してください:

cd /d C:\
7z a MyArchive.7z G\G1\35antique-shop.mp3
7z a MyArchive.7z G\G2\35antique-shop.mp3
7z a MyArchive.7z G\G1\09saguri.mp3
7z a MyArchive.7z G\G2\09saguri.mp3

問題は、人々が何年もの間、適切なパスストレージオプションを要求してきたようです(マルチボリュームアーカイブを変更する機能と同じように)が、作者は興味がないようです。それが、私がWinRARを使い始めた理由の1つです。


あなたはlistfileこのを持っている場合は、7-Zipはなりません、アーカイブするファイルは、単一の最上位ディレクトリを共有していない場合はパスを格納します。たとえば、以下を含むInput.txtがあるとします。

C:\path to\file1.ext
D:\path to\file1.ext
E:\path to\file1.ext

を実行する7z a MyArchive.7z @Input.txtと、パスが完全に取り除かれていることがわかります。これは、私にとっては完全に後ろ向きに見えます(OTOH rar a MyArchive.rar @Input.txtは問題なく動作します)。

したがって、7-Zipの欠陥を克服するために、次のようにバッチファイルを使用できます。

for /f "tokens=1* delims=\" %%i in (Input.txt) do (
    pushd %%i\
    7z a D:\MyArchive.7z "%%j"
    popd
)

注:D:\MyArchive.7z宛先アーカイブへの適切なパスに置き換えてください。また、バッチファイルは、リストファイルでパスを引用符で囲んでいるかどうかに関係なく機能するはずです。


編集:リストファイルが次のようになっている場合:

"C:\$$-edrive\F\faithless.-.long.way.mp3"
"C:\$$-edrive\G\Antique Shop.mp3"

または

"\$$-edrive\F\faithless.-.long.way.mp3"
"\$$-edrive\G\Antique Shop.mp3"

次に、次のように編集します。

"$$-edrive\F\faithless.-.long.way.mp3"
"$$-edrive\G\Antique Shop.mp3"

次に、アーカイブするすべてのファイルがにあると想定しC:\$$-edrive、C:\に移動して実行し7z a C:\MyArchive.7z @C:\Input.txtます。リストファイルを使用すると、ドライブ文字が存在せず、最初のバックスラッシュが存在せず、トップレベル(ルート)ディレクトリがすべてのファイルで同じ場合にのみ、パスが保存されます。また、最良の結果を得るには、C:\ $$-edriveにMyArchive.7zを作成しないことをお勧めします。


ええと、答えは3/4でした。RARは非常に効果的でしたが、バッチファイルはそれなりに機能しました。これが出力であり、ファイル名にスペースを含まない1つのファイルのみをアーカイブに追加しました___ C:\ Programs \ zippers \ 7-Zip>(pushd "C:\ c:\ Programs \ zippers \ 7-Zip \ 7z .exe ac:\ $$-edrive \ FGH.7z "$$-edrive \ G \ gattaca_7mp 3_zefen \ gattaca-03 the one moment.mp3" "popd)7-Zip 4.65 Copyright(c)1999-2009 Igor Pavlov 2009スキャン更新アーカイブc:\ $$-edrive \ FGH.7zエラー:ファイルFGH.7z.tmpを開けませんアクセスが拒否されました。システムエラー:未定義のエラー=====最も重要なのは、おそらくアクセス拒否エラーですか?
PrincessPooleRulz

実際のリストファイルから上記の質問にいくつかのサンプル行(スペースありとなし)を追加できますか?
Karan

さて、ファイル名のすべてのスペースをドットで置き換えましたが、パス名ではなく、これを試してみます。出力はまだです:C:\ Programs \ zippers \ 7-Zip>(______ pushd c:_______ c:\ Programs \ zippers \ 7-Zip \ 7z.exe ac:\ $$-edrive \ FGH.7z "$$- edrive \ F \ filmmusic_14mp3_foretean \ starcraft .-。starcraft.vs.south.park.mp3 "_______ popd________)________ Scanning Updating archive c:\ $$-edrive \ FGH.7z Error:Ca n't open file FGH.7z.tmp Access拒否されました。システムエラー:未定義のエラー
PrincessPooleRulz

「ファイル名のスペースをすべてドットで置き換えました」-実際のファイルの名前を変更したか、リストファイルを編集しただけですか?ファイル名とパスの両方のスペースは問題ないはずです。上記の私の編集を参照してください(つまり、リストファイルからC:\を削除し、すべてのパスを引用符で囲みます)。これで、バッチファイルの回避策の代わりに7zを直接使用できるようになります。
Karan

1.両方の名前を変更しました= = = = = = 2.変更を加えましたが、7z = = = = = = 3ではまだ機能しません。$$-edrive \は確かに唯一の最上位ディレクトリです。= = = = = 4.エラーメッセージ= = = = =ファイルに関する警告:= = = = = $$-edrive:システムはそのファイルを見つけることができません。= = = = = = = = = = "$$-edrive:システムはそのファイルを見つけることができません。= = = = = = = = = =警告:2つのファイルが見つかりません= = = = = C:\ Programs \ zippers \ 7-Zip> = = = = = 2つの警告があり、2番目の警告は1つの二重引用符で始まることに注意してください...奇数?
PrincessPooleRulz

0

7-Zipはそれらを重複と見なし、スキップします。それを回避する方法があるなら、私はそれを見つけたことはありません-私はいつも仕事をいくつかのアーカイブに分割するだけです。


アーカイブにファイルを圧縮しながらフォルダー構造を保持する方法を知っていますか?彼らはそれがデフォルトだと言いますが、そうではありません。
PrincessPooleRulz

@ user194767-次のようなコマンドラインを使用します。%ZDIR%\7z a -t7z -r -mx=1 %ZIP%\mydocu "c:\My Documents\*.*" -wc:\tempここで、ZDIRは7-ZipへのパスZIPで、宛先ドライブです。
MT_Head

0

重複をどのように助けるかわからない。ただし、私は、listfile.txtを作成することで、完全なコマンドごとのバッチよりも便利なシステムになると思います。

 C:\G\G1\35antique-shop.mp3
 C:\G\G2\35antique-shop.mp3
 MyArchive.7z C:\G\G1\09saguri.mp3
 MyArchive.7z C:\G\G2\09saguri.mp3

そして、それらをすべて圧縮します 7z a -r -tzip archive.zip @listfile.txt


0

totalcmd "tot-zip.bat"で使用するbatスクリプトを作成しました。

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION

set "TOP_DIR="D:\Grabovsky""
set "archname="%TOP_DIR%\arch.zip""
set "filelist= "
cd %TOP_DIR%
for %%A in (%*) do (
    set ondisk_path="%%~dpnxA"
    set inarch_path=!ondisk_path:%TOP_DIR%\=!
    echo Putting !ondisk_path! to !inarch_path!.
    set "filelist=!filelist! !inarch_path!"
)
echo filelist: %filelist%

7z.exe a -tzip %archname% %filelist% > NUL
pause

次に、totalcmdでそのショートカットを作成します。 ここに画像の説明を入力してください

次に、一部のファイル/フォルダを圧縮して、フォルダ構造を維持したい場合は%TOP_DIR%、必要なファイルを選択して(内部のどこか%TOP_DIR%)、ボタンを押します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.