使用7zip命令行压缩时,如何排除目录并调整文件路径结构?
解决7zip添加文件时移除指定路径层级的问题
针对你在Delphi 6中调用7z.exe添加文件时,需要去掉路径中EDZ层级的需求,可以通过调整7zip的参数顺序和添加-ep1参数来实现,不需要切换工作目录,也能保留单个文件处理的逻辑。
修改后的Delphi代码
ExecuteAndWait('7z.exe', Format('u -p%s -spf2 -ep1 -xr!EDZ "%s" "%s"', [ZipPassword, ZipFileName, filePathToAdd]), SW_HIDE, ExitCode)
参数说明
-spf2:保留文件的绝对路径,但自动去除网络共享的根节点(即\\192.168.1.243\部分),此时文件路径会被处理为EDZ\25_0001\File.txt。-ep1:移除路径中的第一个目录层级,正好把EDZ\这一层去掉,最终压缩包内的路径就是25_0001\File.txt。-xr!EDZ:避免意外包含EDZ目录本身(针对单个文件处理场景,这个参数可以保留以确保逻辑一致性)。
关键注意点
之前的参数顺序有误,7zip的命令行语法要求选项参数必须放在压缩包路径和文件路径之前,否则部分参数可能无法生效。调整顺序后,-ep1才能正确作用于-spf2处理后的路径。
这个方案不需要切换工作目录,依然可以对每个文件单独做检查后再执行压缩,完全符合你的需求。
内容的提问来源于stack exchange,提问作者Tomo Skraby
相关产品推荐
相关产品推荐

