返回列表 发帖

[文件操作] [分享]批处理提取IE缓存文件

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

ps:忘了给大家说,提取文件大小是有限制的,太小的文件可能会被过滤掉,限制可以通过修改list变量第二节来改变,如下红线所示:
set List4=图片:50000:*.BMP...
修改为0则不限制大小。
新增类型"所有文件"不会对大小进行限制.
@echo off & setlocal enabledelayedexpansion
rem Last modified on 2011-4-21 17:19
rem abc def ghi jkl mno pqr stu vw xyz
::======参数设定======::
set Ver=Ver 1.02
set DAY=3
set Detail=true
set NameMODE=2
set OUTPUT=%~dp0提取缓存文件\
set RegCache="HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders"
set List1=视频:500000:*.FLV,*.F4V,*.HLV,*.WMV,*.MOV,*.MP4,*.MPG,*.M4V,*.AVI,*.RM*,*.ASF
set List2=音频:300000:*.WAV,*.MP3,*.M4A,*.MID,*.WMA,*.RA,*.OGG,*.AAC,*.AMR,*.APE,*.CUE
set List3=压缩:50000:*.RAR,*.ZIP,*.r0?,*.GZ,*.JAR,*.Z,*.7Z
set List4=图片:50000:*.BMP,*.JPG,*.JPEG,*.GIF,*.PNG
set List5=所有:0:*.*
::======工具题头======::
:head
cls
echo =============^|  IE缓存文件提取工具 %Ver%  ^|=============
echo.
echo Support by spark12 QQ:43218369
echo.
if "%1"=="R" goto :EOF
::====手工参数输入====::
:main
echo 说明:
echo     使用本工具可以从IE缓存文件夹中提取缓存文件,请输入
echo 要提取的文件类型:
echo.
echo       v1.02新增: END标签 命名模式选择 退出延时 程序状态显示
echo.
echo       状态:[DAY %DAY%; DET %Detail%; MOD %NameMODE%]
echo.
echo     (注意:新的提取会覆盖老的提取,如有必要请先将旧文件
echo 另存。输入 Q 退出程序)
echo.
set slist=
for /l %%c in (1,1,10) do (
if defined List%%c (
for /f "tokens=1-3 delims=:" %%m in ("!List%%c!") do (
echo [%%c]: %%m文件
set slist=!slist!%%c,
)
)
)
echo.
set /p swich=请输入选择编号 [%slist:~0,-1%]?
set swich=%swich: =%
if /i "%swich%"=="Q" goto end
if not defined List%swich% cls&echo &call:head R&goto main
echo 已选择 %swich%
:dnum
call:head R
echo.
echo     程序可以只提取指定日期内生成的文件,在这里可以输入
echo 天数,以决定提取天数范围,默认为 [%DAY%] 天,如果不想对时
echo 间进行限制,请输入 [0].(例:输入 [1] 为只提取今天)
echo.
set /p DAY=请输入搜索天数[整数]:
set DAY=%DAY: =%
echo %DAY%|FINDSTR /R "^[0-9][0-9]*$" >nul 2>&1||echo &&goto dnum
echo 已输入 %DAY%
if not exist "%OUTPUT%" md "%OUTPUT%"
::获取IE缓存文件夹位置::
for /f "tokens=1,* delims=Z" %%x in ('REG QUERY %RegCache% /v Cache^|find /I "Cache"') do (set IEcache=%%y)
set IEcache=%IEcache:~1%
::==时间偏移计算模块==::
for /f "tokens=1-3 delims=-:/ " %%a in ("%date%") do (
set Y=%%a&set M=%%b&set D=%%c&if "!M:~0,1!"=="0" set M=!M:~1!
if "!D:~0,1!"=="0" set D=!D:~1!
)
set/a D=D-%DAY%
if !D! leq 0 (
set/a M-=1&if !M!==0 set/a Y-=1,M=12
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
)
set M=0%M%
set D=0%D%
set SDay=%Y%!M:~-2!!D:~-2!
::====文件提取模块===::
:extract
call:head R
for /f "tokens=1-3 delims=:" %%m in ("!List%swich%!") do (
set /a Lim=%%n/1024
set Type=%%m
set total=0
if %DAY%==0 (
echo 正在提取 [!Type!] 文件(不限时间, 大于!Lim!K以上)
) else (
echo 正在提取 [!Type!] 文件(%DAY%天内, 大于!Lim!K以上)
)
echo.
if exist "%OUTPUT%!Type!" (
cd "%OUTPUT%!Type!"
del /f /q %%o 2>nul && cd..
) else md "%OUTPUT%!Type!"
set /a countNum=1
set tp=000!countNum!
for /r "%IEcache%" %%g in (%%o) do (
set fileSize=%%~zg
set swh=false
if !fileSize! GEQ %%n (
set fileDate=%%~tg
set fileTime=!fileDate:~11!
set fileTime=!fileTime::=-!
set fileDate=!fileDate:~0,10!
set fileDate=!fileDate:-=!
set fileTime=!fileDate!_!fileTime!
if "%DAY%"=="0" set swh=true
if !fileDate! GTR %SDay% set swh=true
if /i "!swh!"=="true" (
set /a fLim=%%~zg/1024
set /a total+=%%~zg
set lastName=0000%%~ng
set lastName=!lastName:~-7,4!
if /i "%Detail%"=="true" echo COPY 文件:[%%~nxg]  大小:[!fLim! K]
set name=!fileTime!_!lastName:[=0!
if "%NameMODE%"=="2" (
set name=%%~ng
if "!name:~-4,1!"=="[" (
set name=!name:~0,-4!_
) else (
set name=!name:~0,-3!_
)
)
copy /y "%%g" "%OUTPUT%!Type!\!name!!tp:~-4!%%~xg" >nul&&set /a countNum+=1
set tp=000!countNum!
)
)
)
dir /b "%OUTPUT%!Type!"|findstr ".">nul||rd /q "%OUTPUT%!Type!"
set /a countNum-=1
set /a total/=1024
)
::====执行结果模块===::
:summary
call:head R
echo.
if %countNum%==0 (
echo 无可提取%Type%文件.
) else (
echo 共成功提取 [%countNum%] 个%Type%文件(共%total%KB).
echo 全部存入 [%OUTPUT%%Type%].
)
echo.
set /p continue=是否继续提取其它文件(Y/N^)?:
set continue=%continue: =%
if /i not "%continue%"=="N" goto head
dir /b "%OUTPUT%"|findstr ".">nul||cd..&rd /q "%OUTPUT%" 2>nul
:end
echo 正在退出...
ping 128.1 -n 1 -w 500 >nulCOPY

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

2# fastslz


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

TOP

奇怪!本贴在“我的帖子”中消失了? @_@

TOP

返回列表