找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 33046|回复: 8

[文件操作] 【已解决】批处理如何根据文件名将文件压缩

[复制链接]
发表于 2013-2-25 10:44:41 | 显示全部楼层 |阅读模式
本帖最后由 bill_shen 于 2013-3-5 11:25 编辑

1、有一应用软件会不停的产生log,文明命名采用任意字符 + . + 系统时间 + .snapshot来产生,例如(Test.20130225_093714_387.snapshot.log)
2、单log文件到2M,会将原有文件重名为:Test.20130225_093714_387.log,并根据当前系统时间创建新的log文件, Test.20130225_093904_231.snapshot.log,如此反复.
3、由于系统数据量增加,每小时会产生数百个log。


请帮忙写一个批处理,可以将相同小时的log压缩到一起,例如
Test.20130225_093714_387.log、 Test.20130225_093904_231.log 压缩为20130225_09.zip
Test.20130225_101724_322.log、 Test.20130225_101801_529.log 压缩为20130225_10.zip

感谢。。。

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2013-2-25 15:24:02 | 显示全部楼层
本帖最后由 apang 于 2013-2-25 15:27 编辑
  1. fPath = "d:\log"
  2. '待压缩的log文件所在目录
  3. Rar = "C:\Program Files\WinRAR\winrar.exe"
  4. 'winrar安装路径
  5. Set Ws = CreateObject("Wscript.Shell")
  6. Set FSO = CreateObject("Scripting.FileSystemObject")
  7. For Each File in FSO.GetFolder(fPath).Files '遍历文件
  8.    Set Re = New RegExp '建立正则表达式
  9.    Re.IgnoreCase = True '忽略大小写
  10.    Re.Pattern = "^test\.(\d{8}_\d{2})\d{4}_\d{3}\.log$"
  11.    '正则表达式模式
  12.    For Each a in Re.Execute(File.Name) '遍历匹配集合
  13.       Zip = fPath & "" & a.SubMatches(0) & ".zip"
  14.       '压缩后的文件路径及文件名
  15.       Ws.Run """" & Rar & """ a -afzip -ep """ & Zip &_
  16. """ """ & File & """",0,True
  17.       '调用winrar压缩
  18.    Next
  19.    Set Re = Nothing
  20. Next
复制代码
保存为test.vbs,试试
发表于 2013-2-25 21:12:07 | 显示全部楼层
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%a in ('dir /b *.log ^| findstr /v ".snapshot.log$"') do (
  4.     set filename=%%a
  5.     7z.exe a "!filename:~-23,-12!.zip" "%%a"
  6. )
复制代码

评分

参与人数 1技术 +1 收起 理由
bill_shen + 1 谢谢!

查看全部评分

发表于 2013-2-26 02:07:34 | 显示全部楼层
本帖最后由 group 于 2013-2-26 02:09 编辑
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set "rar=!ProgramFiles!\WinRAR\rar.exe"
  4. for %%a in (*.log) do (
  5.    set "var=%%a"
  6.    set ar[!var:~-24,12!]=1
  7. )
  8. for /f "tokens=2 delims=[]" %%a in ('set ar[') do (
  9.    %rar% a "%%a.rar" "*%%a????_???.log"
  10. )
  11. pause
复制代码
 楼主| 发表于 2013-2-28 15:07:02 | 显示全部楼层
谢谢各位的帮忙!
刚才试过了,挺好用的

运行后发现如果有一个.log文件在被其他程序打开的时候,就不能将这个文件进行压缩。
批处理是否可以判断这个文件正在被其他程序使用或打开呢?
如果可以,请告知,
谢谢。
 楼主| 发表于 2013-2-28 15:09:30 | 显示全部楼层
回复 4# group
谢谢,不过压缩的文件名有点问题
 楼主| 发表于 2013-2-28 15:10:13 | 显示全部楼层
回复 2# apang
非常感谢,不过我们老大说只可以用批处理来写,不过还是非常感谢
发表于 2013-2-28 15:14:19 | 显示全部楼层
回复 5# bill_shen


    如果不能直接压缩使用中的文件,那 xcopy 一个临时文件夹就好了
 楼主| 发表于 2013-3-5 11:24:55 | 显示全部楼层
回复 8# CrLf
谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-20 01:34 , Processed in 0.020430 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表