Board logo

标题: [文件操作] 批处理中如何把一个文件添加到一个zip压缩文件的指定目录? [打印本页]

作者: Batcher    时间: 2009-4-12 14:47     标题: 批处理中如何把一个文件添加到一个zip压缩文件的指定目录?

在其它论坛看到这样一个问题,批处理中如何把一个文件添加到一个zip压缩文件的指定目录? 原文如下:
怎样用zip或pkzip的命令行模式 实现 类似WinRAR的“开关 -AP <路径> - 设置压缩文件内的路径”功能。 就是将一个文件压缩到压缩文件下的指定文件里面。例如: 有一压缩文件a.zip,里面包含文件夹b,我应该怎样将文件c.txt压缩到a.zip下的文件夹b里???
现将问题补充如下: 1、允许使用任何第三方命令行压缩工具; 2、我看过7-Zip和PKZIP的命令行帮助文档,没有发现类似的rar.exe的-ap开关; 3、google搜索没有发现有价值的信息; 4、考虑到a.zip可能很大,“解压->move->重新压缩”的方法不予考虑。 [ 本帖最后由 Batcher 于 2009-5-27 12:47 编辑 ]
作者: zqz0012005    时间: 2009-4-12 18:10

第三方压缩工具不想找。可以用vbs实现(不是很完美)
  1. '&@cls&cscript -nologo -e:vbs "%~f0"&exit/b
  2. strSrc = "C:\aaa.rom" '需要被压缩的文件
  3. strZip = "C:\test.zip" 'zip压缩文件
  4. strDst = "\roms" 'zip压缩文件中的指定目录
  5. set ws = CreateObject("WScript.Shell")
  6. set oShell = CreateObject("Shell.Application")
  7. set oZip = oShell.NameSpace(strZip & strDst)
  8. oZip.CopyHere strSrc, 4+16 '参数设置无效,还是有进度条(但正好为异步等待提供了一个检验窗口)
  9. do 'CopyHere方法似乎是异步的,必须等待以便复制完成。
  10. wsh.sleep 200
  11. loop while ws.AppActivate("正在压缩...")
复制代码

作者: defanive    时间: 2009-4-12 18:22

可以解压后复制进去再压缩。。。

效率最低的方法。。。
作者: Batcher    时间: 2009-4-12 18:23     标题: 回复 3楼 的帖子

顶楼发帖时已经明确表示此法不予考虑
作者: Batcher    时间: 2009-4-12 19:44     标题: 回复 2楼 的帖子

ws.AppActivate("正在压缩...")
总是感觉这样的方法依赖性太强了
看看其他人有没有别的方案吧^_^
作者: zqz0012005    时间: 2009-4-14 16:21     标题: 回复 5楼 的帖子

改进了一下,根据已经复制的大小判断是否全部压缩完成
  1. '&@cls&cscript -nologo -e:vbs "%~f0"&exit/b
  2. strSrc = "C:\aaa.rom" '需要被压缩的文件
  3. strZip = "C:\test.zip" 'zip压缩文件
  4. strDst = "\roms" 'zip压缩文件中的指定目录
  5. set fso = CreateObject("Scripting.FileSystemObject")
  6. intSrcSize = fso.GetFile(strSrc).Size
  7. strFile = fso.GetFileName(strSrc)
  8. set oShell = CreateObject("Shell.Application")
  9. 'oShell.ShellExecute "regsvr32", "/s zipfldr.dll" '重新注册可能被优化掉的zipfldr.dll
  10. 'wsh.sleep 1000
  11. set oZip = oShell.NameSpace(strZip & strDst)
  12. oZip.CopyHere strSrc, 4+16
  13. do
  14. wsh.sleep 200
  15. loop while oZip.ParseName(strFile).Size < intSrcSize
复制代码

作者: zqz0012005    时间: 2009-10-7 18:54

奇怪了,今天在某个网吧上网,发现CopyHere的参数设置是有效的。但我上次在公司电脑上测试不管参数设置成什么,还是会出现进度条。

大家帮忙测试一下。




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2