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

[日期时间] 批处理按文件创建时间压缩

[复制链接]
发表于 2013-3-5 11:45:26 | 显示全部楼层 |阅读模式
目前有一个批处理,会将所有的.log压缩。
  1. @echo off
  2. set dat=%date:~0,4%%date:~5,2%%date:~8,2%
  3. C:\Progra~1\WinRAR\rar a -u -ta%dat% -sm51000000 -inul -y F:\baklog\test_log_%date:~0,4%%date:~5,2%%date:~8,2%.rar *.log
复制代码
求高手将其修改为,只压缩其中最早被创建的的100个文件。

其中.log文件是按文件的创建时间来命名的例如:Test.20130305_093714_387.log、Test.20130305_093834_219.log

要求根据当前系统时间为压缩后的文件名, 例如:test_log_2013030511.zip

感谢。
 楼主| 发表于 2013-3-5 18:15:09 | 显示全部楼层
  1. @echo off

  2. set /a num=0

  3. setlocal enabledelayedexpansion

  4. for /f "delims=" %%a in ('dir /b *.log ^| findstr /v ".snapshot.log$"') do (
  5.     set /a num+=1
  6.         move /y %%a "E:\batTest\temp"
  7.        
  8. )

  9. "D:\Program Files (x86)\7-Zip\7zG.exe" a E:\batTest\zip\t-server_log_%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%.zip E:\batTest\temp\*.log

  10. del /s /q E:\batTest\temp\*.log
复制代码
今天自己写的一些代码,可以将所有的.log文件压缩并删除。
 楼主| 发表于 2013-3-5 18:26:53 | 显示全部楼层
  1. @echo off

  2. set /a num=0

  3. setlocal enabledelayedexpansion

  4. for /f "delims=" %%a in ('dir /b *.log ^| findstr /v ".snapshot.log$"') do (
  5.    
  6.        
  7.         if !num! == "100"(
  8.                 goto compFile
  9.         )

  10.         set /a num+=1
  11.         move /y %%a "E:\batTest\temp"
  12.        
  13. )

  14. :compFile
  15. "D:\Program Files (x86)\7-Zip\7zG.exe" a E:\batTest\zip\t-server_log_%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%.zip E:\batTest\temp\*.log
  16. del /s /q E:\batTest\temp\*.log
复制代码
求解。 为什么添加if 语句后无法正常运行。

我希望可以移动100个文件后跳出for in 进行压缩删除操作。
发表于 2013-3-5 20:52:28 | 显示全部楼层
本帖最后由 apang 于 2013-3-5 21:07 编辑

压缩创建日期最早的100个文件
  1. @echo off
  2. set "rar=C:\Program Files\WinRAR\WinRAR.exe"
  3. set "pth=%~p0"
  4. wmic datafile where "drive='%~d0' and path='%pth:\=\\%' and extension='log'" get CreationDate,Name>$

  5. for /f "tokens=1*" %%a in ('sort $') do (
  6.   if /i not "%%a"=="CreationDate" (
  7.     set /a "n+=1,1/(101-n)" 2>nul||(del $&goto :eof)
  8.     "%rar%" a -afzip -agYYYYMMDDHH -ibck "F:\baklog\test_log_" "%%~nxb"
  9.   )
  10. )
复制代码
 楼主| 发表于 2013-3-6 11:20:21 | 显示全部楼层
回复 4# apang

谢谢你的代码,
如果再次运行的时候, 不能够将新的.log文件添加到刚才的生成的压缩包中,请问需要如何修改。
发表于 2013-3-6 19:31:33 | 显示全部楼层
回复 5# bill_shen


     你的思维很让人费解。
对不起,我没法帮你
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-20 00:32 , Processed in 0.019081 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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