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>
この結果を得るのに手伝ってもらえますか?ありがとう
正確な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
を変更した後でも、実際のコマンドを確認する必要があるという問題が解決されません。