Board logo

标题: [文件操作] 【已解决】批处理如何根据文件名将文件压缩 [打印本页]

作者: bill_shen    时间: 2013-2-25 10:44     标题: 【已解决】批处理如何根据文件名将文件压缩

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

感谢。。。
作者: apang    时间: 2013-2-25 15:24

本帖最后由 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,试试
作者: Batcher    时间: 2013-2-25 21:12

  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. )
复制代码

作者: group    时间: 2013-2-26 02:07

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

作者: bill_shen    时间: 2013-2-28 15:07

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

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

回复 4# group
谢谢,不过压缩的文件名有点问题
作者: bill_shen    时间: 2013-2-28 15:10

回复 2# apang
非常感谢,不过我们老大说只可以用批处理来写,不过还是非常感谢
作者: CrLf    时间: 2013-2-28 15:14

回复 5# bill_shen


    如果不能直接压缩使用中的文件,那 xcopy 一个临时文件夹就好了
作者: bill_shen    时间: 2013-3-5 11:24

回复 8# CrLf
谢谢!




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