我正在(尝试)开发一个程序,通过 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>
我能得到一些帮助来获得这个结果吗?谢谢
答案1
如果不知道您的确切7z
命令,那只是猜测,但情况如下:
7z a -t7z -ir@"files_to_include.txt" -xr@"files_to_exclude.txt" ....
注意r
后面的-i
和-x
表示递归。您可能还会@
在文件名前使用 而不是!
。(或者至少您应该这样做。!
用于在命令行中指定通配符:)
然后针对您的files_to_exclude.txt
内容。我相信您应该使用相对的路径。因此,不要c:\....
在路径前指定。如果包含中的常用路径是,c:\path\path2
则需要删除这来自排除。原因是在7z
压缩文件时它已经消除了 -part 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
因此,如果在添加和更改新的之后r
您-i
仍然-x
遇到files_to_exclude.txt
问题,我们需要查看您的实际命令。