Board logo

标题: [文件操作] [分享]批处理提取IE缓存文件 [打印本页]

作者: spark12    时间: 2011-4-21 17:42     标题: [分享]批处理提取IE缓存文件

近来很忙,很久没上来了^_^
做了些小改动,小升一下下...

ps:忘了给大家说,提取文件大小是有限制的,太小的文件可能会被过滤掉,限制可以通过修改list变量第二节来改变,如下红线所示:
set List4=图片:50000:*.BMP...
修改为0则不限制大小。
新增类型"所有文件"不会对大小进行限制.
  1. @echo off & setlocal enabledelayedexpansion
  2. rem Last modified on 2011-4-21 17:19
  3. rem abc def ghi jkl mno pqr stu vw xyz
  4. ::======参数设定======::
  5. set Ver=Ver 1.02
  6. set DAY=3
  7. set Detail=true
  8. set NameMODE=2
  9. set OUTPUT=%~dp0提取缓存文件\
  10. set RegCache="HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders"
  11. set List1=视频:500000:*.FLV,*.F4V,*.HLV,*.WMV,*.MOV,*.MP4,*.MPG,*.M4V,*.AVI,*.RM*,*.ASF
  12. set List2=音频:300000:*.WAV,*.MP3,*.M4A,*.MID,*.WMA,*.RA,*.OGG,*.AAC,*.AMR,*.APE,*.CUE
  13. set List3=压缩:50000:*.RAR,*.ZIP,*.r0?,*.GZ,*.JAR,*.Z,*.7Z
  14. set List4=图片:50000:*.BMP,*.JPG,*.JPEG,*.GIF,*.PNG
  15. set List5=所有:0:*.*
  16. ::======工具题头======::
  17. :head
  18. cls
  19. echo =============^|  IE缓存文件提取工具 %Ver%  ^|=============
  20. echo.
  21. echo Support by spark12 QQ:43218369
  22. echo.
  23. if "%1"=="R" goto :EOF
  24. ::====手工参数输入====::
  25. :main
  26. echo 说明:
  27. echo     使用本工具可以从IE缓存文件夹中提取缓存文件,请输入
  28. echo 要提取的文件类型:
  29. echo.
  30. echo       v1.02新增: END标签 命名模式选择 退出延时 程序状态显示
  31. echo.
  32. echo       状态:[DAY %DAY%; DET %Detail%; MOD %NameMODE%]
  33. echo.
  34. echo     (注意:新的提取会覆盖老的提取,如有必要请先将旧文件
  35. echo 另存。输入 Q 退出程序)
  36. echo.
  37. set slist=
  38. for /l %%c in (1,1,10) do (
  39. if defined List%%c (
  40. for /f "tokens=1-3 delims=:" %%m in ("!List%%c!") do (
  41. echo [%%c]: %%m文件
  42. set slist=!slist!%%c,
  43. )
  44. )
  45. )
  46. echo.
  47. set /p swich=请输入选择编号 [%slist:~0,-1%]?
  48. set swich=%swich: =%
  49. if /i "%swich%"=="Q" goto end
  50. if not defined List%swich% cls&echo &call:head R&goto main
  51. echo 已选择 %swich%
  52. :dnum
  53. call:head R
  54. echo.
  55. echo     程序可以只提取指定日期内生成的文件,在这里可以输入
  56. echo 天数,以决定提取天数范围,默认为 [%DAY%] 天,如果不想对时
  57. echo 间进行限制,请输入 [0].(例:输入 [1] 为只提取今天)
  58. echo.
  59. set /p DAY=请输入搜索天数[整数]:
  60. set DAY=%DAY: =%
  61. echo %DAY%|FINDSTR /R "^[0-9][0-9]*$" >nul 2>&1||echo &&goto dnum
  62. echo 已输入 %DAY%
  63. if not exist "%OUTPUT%" md "%OUTPUT%"
  64. ::获取IE缓存文件夹位置::
  65. for /f "tokens=1,* delims=Z" %%x in ('REG QUERY %RegCache% /v Cache^|find /I "Cache"') do (set IEcache=%%y)
  66. set IEcache=%IEcache:~1%
  67. ::==时间偏移计算模块==::
  68. for /f "tokens=1-3 delims=-:/ " %%a in ("%date%") do (
  69. set Y=%%a&set M=%%b&set D=%%c&if "!M:~0,1!"=="0" set M=!M:~1!
  70. if "!D:~0,1!"=="0" set D=!D:~1!
  71. )
  72. set/a D=D-%DAY%
  73. if !D! leq 0 (
  74. set/a M-=1&if !M!==0 set/a Y-=1,M=12
  75. set/a "T=^!(M-2)","R=(^!(Y%%4)&^!^!(Y%%100))|^!(Y%%400)","C=^!(M-4)|^!(M-6)|^!(M-9)|^!(M-11)","D=T*(28+R)+C*30+(^!T&^!C)*31"+D
  76. )
  77. set M=0%M%
  78. set D=0%D%
  79. set SDay=%Y%!M:~-2!!D:~-2!
  80. ::====文件提取模块===::
  81. :extract
  82. call:head R
  83. for /f "tokens=1-3 delims=:" %%m in ("!List%swich%!") do (
  84. set /a Lim=%%n/1024
  85. set Type=%%m
  86. set total=0
  87. if %DAY%==0 (
  88. echo 正在提取 [!Type!] 文件(不限时间, 大于!Lim!K以上)
  89. ) else (
  90. echo 正在提取 [!Type!] 文件(%DAY%天内, 大于!Lim!K以上)
  91. )
  92. echo.
  93. if exist "%OUTPUT%!Type!" (
  94. cd "%OUTPUT%!Type!"
  95. del /f /q %%o 2>nul && cd..
  96. ) else md "%OUTPUT%!Type!"
  97. set /a countNum=1
  98. set tp=000!countNum!
  99. for /r "%IEcache%" %%g in (%%o) do (
  100. set fileSize=%%~zg
  101. set swh=false
  102. if !fileSize! GEQ %%n (
  103. set fileDate=%%~tg
  104. set fileTime=!fileDate:~11!
  105. set fileTime=!fileTime::=-!
  106. set fileDate=!fileDate:~0,10!
  107. set fileDate=!fileDate:-=!
  108. set fileTime=!fileDate!_!fileTime!
  109. if "%DAY%"=="0" set swh=true
  110. if !fileDate! GTR %SDay% set swh=true
  111. if /i "!swh!"=="true" (
  112. set /a fLim=%%~zg/1024
  113. set /a total+=%%~zg
  114. set lastName=0000%%~ng
  115. set lastName=!lastName:~-7,4!
  116. if /i "%Detail%"=="true" echo COPY 文件:[%%~nxg]  大小:[!fLim! K]
  117. set name=!fileTime!_!lastName:[=0!
  118. if "%NameMODE%"=="2" (
  119. set name=%%~ng
  120. if "!name:~-4,1!"=="[" (
  121. set name=!name:~0,-4!_
  122. ) else (
  123. set name=!name:~0,-3!_
  124. )
  125. )
  126. copy /y "%%g" "%OUTPUT%!Type!\!name!!tp:~-4!%%~xg" >nul&&set /a countNum+=1
  127. set tp=000!countNum!
  128. )
  129. )
  130. )
  131. dir /b "%OUTPUT%!Type!"|findstr ".">nul||rd /q "%OUTPUT%!Type!"
  132. set /a countNum-=1
  133. set /a total/=1024
  134. )
  135. ::====执行结果模块===::
  136. :summary
  137. call:head R
  138. echo.
  139. if %countNum%==0 (
  140. echo 无可提取%Type%文件.
  141. ) else (
  142. echo 共成功提取 [%countNum%] 个%Type%文件(共%total%KB).
  143. echo 全部存入 [%OUTPUT%%Type%].
  144. )
  145. echo.
  146. set /p continue=是否继续提取其它文件(Y/N^)?:
  147. set continue=%continue: =%
  148. if /i not "%continue%"=="N" goto head
  149. dir /b "%OUTPUT%"|findstr ".">nul||cd..&rd /q "%OUTPUT%" 2>nul
  150. :end
  151. echo 正在退出...
  152. ping 128.1 -n 1 -w 500 >nul
复制代码

作者: fastslz    时间: 2011-4-22 10:56

获取IE缓存文件夹位置需要修正
  1. for /f "tokens=1,* delims=Z" %%x in ('REG QUERY %RegCache% /v Cache^|find /I "Cache"') do (set IEcache=%%y)
  2. set IEcache=%IEcache:~1%
复制代码
改为
  1. for /f "tokens=2,* delims= " %%x in ('REG QUERY %RegCache% /v Cache^|find /I "Cache"') do (set IEcache=%%y)
复制代码
执行效率更高点改为
  1. for /f "skip=4 tokens=2*" %%a in ('reg QUERY %RegCache% /v "Cache"') do set "IEcache=%%b"
复制代码
兼容性强一点改为
  1. >tmp.vbs echo WScript.Echo CreateObject("Shell.Application").Namespace(^&H20^&).Self.Path
  2. for /f "delims=" %%i in ('cscript.exe //nologo tmp.vbs') do set IEcache=%%i& del tmp.vbs
复制代码

作者: ygqiang    时间: 2011-4-22 11:23

http://www.bathome.net/thread-11808-1-1.html

如何清除ie地址栏的历史网站记录呢?

多谢楼上2位。
作者: ygqiang    时间: 2011-4-22 11:25

帮忙解决下啊。
作者: fastslz    时间: 2011-4-22 17:43

  1. RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 1
复制代码

作者: fastslz    时间: 2011-4-22 22:04

之前还以为是历史记录,原来是“自动完成历史记录”可能表达不同吧
  1. :删除IE历史
  2. RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 1
  3. :删除自动完成历史记录
  4. RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 8649
复制代码

作者: jay_16    时间: 2011-4-23 14:16

好强大。学习一下。
作者: spark12    时间: 2011-4-29 01:01

本帖最后由 spark12 于 2011-4-29 01:22 编辑

2# fastslz


多谢提醒! 还是这样好一点
  1. for /f "tokens=2*" %%x in ('REG QUERY %RegCache% /v Cache^|find /I "Cache"') do (set IEcache=%%y)
复制代码
相对于REG FIND 感觉还是 WScript cscript 比较容易被搞定
有了FIND兼容性也强一些。至于效率嘛...BAT上应该觉察不到区别吧,呵!
作者: spark12    时间: 2011-6-24 22:58

奇怪!本贴在“我的帖子”中消失了? @_@
作者: CrLf    时间: 2011-6-24 23:03

不错
如果此贴是原创内容的话,可否移动到原创代码区呢?征求下楼主的意见...




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