私はこのようなファイルがたくさんあります:
C:\G\G1\35antique-shop.mp3
C:\G\G2\35antique-shop.mp3
C:\G\G1\09saguri.mp3
C:\G\G2\09saguri.mp3
keepアーカイブ中のフォルダ構造を知りたいだけです。これは重複するものよりも重要であり、それを解決する方法を知ることはボーナスになるでしょう。
@Lamb "G1およびG2フォルダーから選択したファイルのみ(フォルダー全体ではなく)をアーカイブしますか?"
それはほとんどすべてを言いますが、私は改善しようとします:私はしたいだけではありませんmove一部の選択されたファイルのみアーカイブに。また、これらのファイルのlistもあり、各ファイルへのパス名も含まれています。
したがって、SubDir1には10個のファイルがあり、そのうち3個をZipしたい場合があり、SubDir1\sub2には5個のファイルがあり、5つすべてをZipしたい場合があります。アーカイブする必要があるファイルはリストファイルにあります。
ファイルが重複している可能性があるので、サブディレクトリを追加すると、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
これは実際には選択に関してはかなりうまく機能しますが、ディレクトリ構造は保持されません。悲しいことに。
どうすればよいですか?
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を使用してさらにテストを行いました。結果は here です。
サブディレクトリがあるディレクトリをアーカイブする 以下を使用 :
7z.exe a - t7z NewArchivePath PathOfFolderToArchive
代わりにこれを試してください:
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
問題は、適切なパスストレージオプションのために人々が years を要求してきたようです( マルチボリュームアーカイブを変更する機能 と同じように) 、しかし著者は興味がないようです。それが、WinRARを使い始めた理由の1つです。
リストファイルがある場合、アーカイブするファイルが単一の最上位ディレクトリを共有しない場合、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"
ここで、アーカイブする all ファイルがC:\$$-edrive
の下にあると想定して、C:\に移動し、7z a C:\MyArchive.7z @C:\Input.txt
を実行します。リストファイルを使用すると、パスが保存されます only ドライブ文字が存在せず、最初のバックスラッシュがなく、トップレベル(ルート)ディレクトリがすべてのファイルで同じ場合。また、最良の結果を得るには、C:\ $$-edriveにMyArchive.7zを作成しないことをお勧めします。
重複をどのように助けるかわからない。ただし、私は、listfile.txtを作成することで、完全なコマンドを1つにまとめたバッチよりも便利なシステムになると思います。
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
で圧縮します
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
次に、一部のファイル/フォルダを圧縮して%TOP_DIR%
に関連するフォルダ構造を保持する場合は、必要なファイル(%TOP_DIR%
内のどこか)を選択してボタンを押すだけです。
7-Zipはそれらを重複と見なし、スキップします。それを回避する方法があるなら、私はそれを見つけられませんでした-私はいつも仕事をいくつかのアーカイブに分割するだけです。