[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] 批处理中如何把一个文件添加到一个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 编辑 ]
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

第三方压缩工具不想找。可以用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("正在压缩...")
复制代码
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

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

效率最低的方法。。。
第三方命令行工具编程
Http://Hi.Baidu.Com/Console_App

TOP

回复 3楼 的帖子

顶楼发帖时已经明确表示此法不予考虑
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 2楼 的帖子

ws.AppActivate("正在压缩...")
总是感觉这样的方法依赖性太强了
看看其他人有没有别的方案吧^_^
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 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
复制代码
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

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

大家帮忙测试一下。
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

返回列表