web-dev-qa-db-ja.com

7-Zip-コマンドラインを使用してファイルの大きなリストを含めたり除外したりする方法

ShellExecute()を介して7-Zipコンソールプログラム(7z.exe)を操作するプログラムを開発し、コンピューターで生成されたファイルのリストを渡します。

今私がしたいのはこれです:

ファイルを含めたり除外したりするように指示するコマンドラインを渡したい:つまり

include these :
c:\path\path2\path
c:\path\path2\path__\
.... more files

exclude these :
c:\path\path2\path\data\files\foo\bar\fish.dat
c:\path\path2\path__\data\slug.mp3
.... more files

だから私はこのようなコマンドラインを作ります:

7z a -t7z -i!"...file to include" -x!"file to exclude" ... etc etc

私はメモリから繰り返しているので、コマンドラインが正確でない可能性があることを知っています

しかし、私が入力したものは機能しません。 pathとpath__にすべてを取得します。私が欲しいのは、次のようなアーカイブです。

.\
path\
     data\
          files\
                foo\
                    bar\
                        <everything in path\data\files\foo\bar except for foo.dat>
path__\
       data\
            <everything in path__\data\ except for slug.mp3>

この結果を得るのに手伝ってもらえますか?ありがとう

7
zsteve

正確な7zコマンドを知らなくても、それは推測にすぎませんが、ここでは次のようになります。

7z a -t7z -ir@"files_to_include.txt" -xr@"files_to_exclude.txt" ....

再帰的な場合は、-iの後のr-xに注意してください。また、ファイル名の前に@の代わりに!を使用した可能性があります。 (または少なくともそうする必要があります。!はコマンドラインでワイルドカードを指定するために使用されます:)

次に、files_to_exclude.txtのコンテンツについて説明します。ここではrelativeパスを使用する必要があると思います。したがって、パスの前にc:\....を指定しないでください。インクルード内の共通パスがc:\path\path2の場合、除外から削除これを行う必要があります。この理由は、7zがファイルを圧縮している間、すでにc:\path\path2部分が削除されているためです(パス全体が保存されるのではなく、相対部分のみが保存されるため)。したがって、あなたの除外はもはや一致しません。これは、.Zipを開くときにc:\path\path2が.Zipにないためにわかります。 (したがって、それを一致させることは機能しません)

したがって、files_to_exclude.txtは次のようになります。

path\data\files\foo\bar\fish.dat
path__\data\slug.mp3
.... more files

したがって、-i-xの後にrを追加し、新しいfiles_to_exclude.txtを変更した後でも、実際のコマンドを確認する必要があるという問題が解決されません。

8
Rik