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

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

本帖最后由 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

感谢。。。
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

本帖最后由 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,试试

TOP

  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

评分人数

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

TOP

本帖最后由 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
复制代码

TOP

谢谢各位的帮忙!
刚才试过了,挺好用的

运行后发现如果有一个.log文件在被其他程序打开的时候,就不能将这个文件进行压缩。
批处理是否可以判断这个文件正在被其他程序使用或打开呢?
如果可以,请告知,
谢谢。

TOP

回复 4# group
谢谢,不过压缩的文件名有点问题

TOP

回复 2# apang
非常感谢,不过我们老大说只可以用批处理来写,不过还是非常感谢

TOP

回复 5# bill_shen


    如果不能直接压缩使用中的文件,那 xcopy 一个临时文件夹就好了

TOP

回复 8# CrLf
谢谢!

TOP

返回列表