标题: [文件操作] [已解决]如何精简IE缓存提取工具的批处理文件? [打印本页]
作者: lujice 时间: 2012-2-4 18:49 标题: [已解决]如何精简IE缓存提取工具的批处理文件?
我正在尝试用批处理写一些简单的工具。下面这个“IE缓存提取工具.bat”,就是我的一次尝试。试着运行,效果还可以。但是,代码也太庸长、太重复了吧!!
问题已经解决。大家修改后的“最终代码”如下——- @echo off
- color 0a&mode con cols=70 lines=18&title 欢迎使用“IE缓存提取器”!!
- set LJ=%cd%
- set CS=%UserProfile%\Local Settings\Temporary Internet Files\Content.IE5
- :IE
- cls&echo.&echo.
- echo. ——欢迎使用“IE缓存提取器”!!
- echo.
- echo. ╭───────────────╮
- echo. ╭────┤ 请选择,您要执行的操作—— ├─────╮
- echo. │ ╰───────────────╯ │
- echo. │ 0: 清空IE缓存 3: 提取常见图片 │
- echo. │ │
- echo. │ 1: 提取常见视频 4: 提取常见文档 │
- echo. │ │
- echo. │ 2: 提取常见音频 5: 提取指定文件 │
- echo. ╰──────────────────────────╯
- echo. 作者:溪水听冬 QQ:471 996 462
- echo.&set /p IE= 输入您选择的“数字”后,请敲回车:
- attrib -s -h -r "%CS%\*.*" /s /d >nul 2>nul
- set SP=FLV mp4 RM RMVB WMV AVI ASF 3GP DivX
- set YP=MP3 WMA WAV CDA APE FLAC OGG AAC
- set TP=BMP GIF JPG PNG TGA SVG
- set WD=TXT PDF RTF CHM HLP DOC XLS PPT
- if /i "%IE%"=="0" goto QK
- if /i "%IE%"=="1" call :copy %SP%
- if /i "%IE%"=="2" call :copy %YP%
- if /i "%IE%"=="3" call :copy %TP%
- if /i "%IE%"=="4" call :copy %WD%
- if /i "%IE%"=="5" goto ZD
- cls
- echo.&echo.&echo. 你输入的“ %IE% ”无效!!
- echo.&echo.&echo. 别调皮了,返回重新输入吧!!!
- echo.&echo.&pause
- goto IE
-
- :QK
- cls
- echo.&echo.&echo. ——为了保证“IE缓存”删除干净,
- echo.&echo.&echo. 即将关闭 "IE 进程" 和 "视窗进程"...
- ping 127.0.0.1 -n 3 >nul 2>nul
- CD "%CS%\"
- taskkill /f /im explorer.exe >nul 2>nul
- taskkill /f /im iexplore.exe >nul 2>nul
- rd /s /q "%CS%\" >nul 2>nul
- del /f /s /q "%CS%\*.*" >nul 2>nul
- start explorer.exe >nul 2>nul
- CD %LJ%
- goto IE
-
- :copy
- cls
- set DQ=%1 %2 %3 %4 %5 %6 %7 %8 %9
- for %%a in (%DQ%) do (
- echo.&echo. 正在提取 %%a 文件...
- echo.&xcopy "%CS%\*.%%a" "%LJ%\IE缓存\%%a文件\" /S /Q /H /Y /C
- ping 127.0.0.1 -n 3 >nul 2>nul
- )
- goto END
-
- :ZD
- cls&echo.&echo.
- echo. ——即将提取您指定的文件!!
- echo.
- echo. ╭───────────────╮
- echo. ╭────┤ 请指定:您要提取的文件格式 ├─────╮
- echo. │ ╰───────────────╯ │
- echo. │ 例如: 提取“图标文件”,就输入 —— ICO │
- echo. │ │
- echo. │ 又如: 提取“广告动画”,就输入 —— SWF │
- echo. ╰──────────────────────────╯
- echo.&echo.&set /p ZD= 输入您选择的“文件后缀名”后,请敲回车:
- cls&echo.&echo. 正在提取 %ZD% 文件...
- echo.&xcopy "%CS%\*.%ZD%" "%LJ%\IE缓存\%ZD%文件\" /S /Q /H /Y /C
- ping 127.0.0.1 -n 3 >nul 2>nul
- goto END
-
- :END
- cls
- if exist "%LJ%\IE缓存\" (goto CG)
- echo.&echo.&echo. “IE缓存目录” 中,没有您要提取的文件!!
- echo.&echo.&echo. 请浏览一次相应网页后,再来提取!!
- echo.&echo.&pause
- goto IE
- :CG
- attrib -s -h -r "%LJ%\IE缓存\*.*" /s /d
- echo.&echo. 资源已提取到“%LJ%\IE缓存”目录中!
- echo.&echo. 如要提取其它格式的缓存文件,请返回主菜单,
- echo.&echo. 运行“提取指定文件”选项!
- echo.&pause
- goto IE
复制代码
作者: ivor 时间: 2012-2-4 19:27
本帖最后由 ivor 于 2012-2-10 13:16 编辑
囧 太多代码了,打酱油路过,
本来不想看了,这代码太臃肿了,楼主试试吧,现在精简掉了了很多代码了,我没有测试。。
对你的K 块代码,好几处不解,
cd 命令用得到吗?你删除文件都已经指定了绝对路径- @echo off
- color 0a&mode con cols=70 lines=18&title 欢迎使用“IE缓存提取器”!!
- :IE
- cls&echo.&echo.
- echo. ——欢迎使用“IE缓存提取器”!!
- echo.
- echo. ╭───────────────╮
- echo. ╭────┤ 请选择,您要执行的操作—— ├─────╮
- echo. │ ╰───────────────╯ │
- echo. │ 0: 清空IE缓存 3: 提取常见图片 │
- echo. │ │
- echo. │ 1: 提取常见视频 4: 提取常见文档 │
- echo. │ │
- echo. │ 2: 提取常见音频 5: 提取指定文件 │
- echo. ╰──────────────────────────╯
- echo. 作者:溪水听冬 QQ:471 996 462
- echo.&set /p IE= 输入您选择的“数字”后,请敲回车:
- attrib -s -h -r "%UserProfile%\Local Settings\*.*" /s /d >nul 2>nul
- REM /*************初始化文件后缀名
- set audio=MP3 WMA WAV CDA APE FLAC OGG AAC
- set vedio=FLV mp4 RM RMVB WMV AVI 3GP DivX
- set picture=BMP GIF JPG PNG BMP
- set document=TXT PDF RTF CHM HLP DOC XLS PPT
- REM ***********************************/
- if /i "%IE%"=="0" goto QK
- REM /************CALL调用:copy过程*******
- if /i "%IE%"=="1" call :copy %vedio%
- if /i "%IE%"=="2" call :copy %audio%
- if /i "%IE%"=="3" call :copy %picture%
- if /i "%IE%"=="4" call :copy %document%
- REM ***********************************/
- if /i "%IE%"=="5" goto ZD
-
- cls
- echo.&echo.&echo. 你输入的“ %IE% ”无效!!
- echo.&echo.&echo. 别调皮了,返回重新输入吧!!!
- echo.&echo.&pause
- goto IE
- REM /**cd 命令不该用的地方。已经被删除,如果有错误再添加回去
- :QK
- cls
- echo.&echo.&echo. ——为了保证“IE缓存”删除干净,
- echo.&echo.&echo. 即将关闭 "IE 进程" 和 "视窗进程"...
- ping 127.0.0.1 -n 3 >nul 2>nul
- taskkill /f /im explorer.exe >nul 2>nul
- taskkill /f /im iexplore.exe >nul 2>nul
- rd /s /q "%userprofile%\Local Settings\History\"
- rd /s /q "%userprofile%\Local Settings\Temporary Internet Files\"
- del /f /s /q "%userprofile%\Local Settings\History\*.*"
- del /f /s /q "%userprofile%\Local Settings\Temporary Internet Files\*.*"
- REM ***********************************//////
- goto IE
-
- REM /*多个提取过程因为有相同属性,集合到了一块代码,采用CALL传值
- :copy
- cls
-
- for %%a in (%*) do (
- echo.&echo. 正在提取 %%a 文件...
- echo.&xcopy "%UserProfile%\Local Settings\Temporary Internet Files\*.%%a" "D:\IE缓存\%%a文件\" /S /Q /H /Y /C
- ping 127.0.0.1 -n 3 >nul 2>nul
-
- )
- goto DK
- REM ****************************************************//
- :ZD
- cls&echo.&echo.
- echo. ——即将提取您指定格式的文件!!
- echo.
- echo. ╭───────────────╮
- echo. ╭────┤ 请指定:您要提取的文件格式 ├─────╮
- echo. │ ╰───────────────╯ │
- echo. │ 例如: 提取“图标文件”,就输入 —— ICO │
- echo. │ │
- echo. │ 又如: 提取“广告动画”,就输入 —— SWF │
- echo. ╰──────────────────────────╯
- echo.&echo.&set /p ZD= 输入您选择的“文件后缀名”后,请敲回车:
- cls&echo.&echo. 正在提取 %ZD% 文件...
- echo.&xcopy "%UserProfile%\Local Settings\Temporary Internet Files\*.%ZD%" "D:\IE缓存\%ZD%文件\" /S /Q /H /Y /C
- ping 127.0.0.1 -n 3 >nul 2>nul
- goto DK
-
- :DK
- cls
- echo.&echo. —— 您要提取的文件,已经全部提取到
- echo.&echo. “D:\IE缓存\”文件夹中的相应目录!!
- echo.&echo. 如要提取IE浏览器的、其它格式的缓存文件,
- echo.&echo. 请返回主菜单,运行“提取指定文件”选项!
- echo.&pause
- if exist "D:\IE缓存\" (attrib -s -h -r "D:\IE缓存\*.*" /s /d &start "" "D:\IE缓存\")
- goto IE
复制代码
作者: cjiabing 时间: 2012-2-4 21:59
本帖最后由 cjiabing 于 2012-2-5 19:02 编辑
- @echo off
- ::查看临时文件(通用)
- start "" "C:\Documents and Settings\Administrator\Local Settings\Temporary Internet Files\Content.IE5"
- for /f "tokens=* delims=" %%a in ('dir /a /b /s "%userprofile%\Local Settings\Temporary Internet Files\*.*"') do echo %%a
- pause
复制代码
应该不用setlocal,不懂怎么放进去了?!
-
- @echo off&setlocal enabledelayedexpansion&::by cjiabing&from http://hi.baidu.com/cjiabing
- title 查找和提取缓存文件
- ::提取临时文件指定文件名
- :GetTempFileName
- cls
- echo.
- echo,
- echo; 可以加入后缀名,如:mynetwork.html
- echo; 可以加入通配符,如:*qq* *.jpg
- echo;
- set input=
- set /p input= 输入文件名:
- echo.&set num=0
- set "padd=%~dp0"
- cd /d "C:\Documents and Settings\Administrator\Local Settings\Temporary Internet Files\Content.IE5"
- echo:-------------------------------------------------------------------------
- for /f "tokens=*" %%a in ('dir %input% /b /s') do (set /a num+=1&echo;【!num!】%%~nxa&echo;%%~sdpa&echo;%%~tzaa&echo;)
- set inport=
- set /p inport= 是否提取文件【Y/Enter】输入数字提取指定行:
- if "%inport%"=="" goto GetTempFileName
- set js=0
- for /f "tokens=*" %%a in ('dir %input% /b /s') do (
- set /a js+=1
- if /i "%inport%"=="Y" copy "%%~a" "%padd%"
- if /i "%inport%"=="!js!" copy "%%~a" "%padd%"
- )
- echo;
- echo 提取结束,请查看当前目录!
- echo;
- pause
- goto GetTempFileName
复制代码
作者: find 时间: 2012-2-4 23:01
回复 2# ivor - if "%IE%"=="0" (
- goto :QK
- ) else if "%IE%"=="1" (
- call :copy %vedio%
- ) else if "%IE%"=="2" (
- call :copy %audio%
- ) else if "%IE%"=="3" (
- call :copy %picture%
- ) else if "%IE%"=="4" (
- call :copy %document%
- ) else if "%IE%"=="5" (
- goto :ZD
- )
复制代码
作者: lujice 时间: 2012-2-5 10:26
本帖最后由 lujice 于 2012-2-5 12:19 编辑
囧 太多代码了,打酱油路过,
本来不想看了,这代码太臃肿了,楼主试试吧,现在精简掉了了很多代码了 ...
ivor 发表于 2012-2-4 19:27
谢谢好人啊!!
我的 “:QK”板块之所以这么写,原因有二:
1、分别以RD和DEL命令各删除一次,是为了删除的更彻底。
2、用RD命令清空某目录下所有的文件和子目录,但不删除该目录,写法都应该是——
先进入这个目录,
再删除这个目录。
(由于已经进入了这个目录,这个目录被占用。因此,该目录本身不会被删除)
最后再回到原来的路径。
我现在就去检查代码运行的情况。
再一次谢谢您!!
作者: lujice 时间: 2012-2-5 11:49
本帖最后由 lujice 于 2012-2-5 12:16 编辑
回复 3# cjiabing
有两段代码不懂,麻烦斑竹逐句解释一下,我太笨!!- if %input%==2 set "type=*.jpg *.jpeg *.gif bmp *.png *.tiff *.PSD"&goto _TREE
复制代码
- :_TREE
- if not exist "%~dp0GetTmp" md "%~dp0GetTmp"
- for /d %%a in ("%userprofile%\Local Settings\Temporary Internet Files\Content.IE5\*") do (
- echo:%%a&cd /d %%a
- for /r %%i in (%TYPE%) do (
- if exist "%~dp0GetTmp\%%~na" (Xcopy /s /y "%%~i" "%~dp0GetTmp\%%~na") else (md "%~dp0GetTmp\%%~na"&Xcopy /s /y "%%~i" "%~dp0GetTmp\%%~na")
- )
- )
- cd /d %~dp0
- cls&dir /b "%~dp0GetTmp"
- pause&goto start
复制代码
不过我感觉,斑竹的代码还可以精简!!
因为复制文件,不用判断“最后存放目录”是否存在;也不用专门写代码建立“最后存放目录”。
比如这段简单的代码——- @echo off
- cls&echo.&echo. 正在提取 MP3 文件...
- echo.&xcopy "%UserProfile%\Local Settings\Temporary Internet Files\Content.IE5\*.MP3" "%CD%\IE缓存\MP3文件\" /S /Q /H /Y /C
- ping 127.0.0.1 -n 3 >nul 2>nul
- exit
复制代码
注意——把"%CD%\IE缓存\MP3文件\",写作"%CD%\IE缓存\MP3文件",批处理就不能自动建立“最后存放目录”了!!
其中的变量%CD%,是系统默认的批处理当前目录。请看——- @echo off
- echo.&echo. 当前盘符:%~d0
- echo.&echo. 当前盘符和路径:%~dp0
- echo.&echo. 当前批处理全路径:%~f0
- echo.&echo. 当前盘符和路径的短文件名格式:%~sdp0
- echo.&echo. 当前CMD默认目录:%cd%
- echo.&pause
- exit
复制代码
作者: lujice 时间: 2012-2-5 11:54
回复 2# ivor
运行您的代码失败!!
比如,要复制音频文件,则只能复制MP3文件,后面的那些WMA、WAV、CDA、APE、FLAC、OGG和AAC文件,统统都没复制出来。
也许,你的变量循环赋值问题没解决好......
我没能力改写,等您了....,.,.
作者: ivor 时间: 2012-2-5 12:45
本帖最后由 ivor 于 2012-2-5 12:48 编辑
回复 7# lujice
:copy 修改为,2楼的全部代码已经更新- :copy
- cls
- set suffix=%1 %2 %3 %4 %5 %6 %7 %8
- for %%a in (%suffix%) do (
- echo.&echo. 正在提取 %%a 文件...
- echo.&xcopy "%UserProfile%\Local Settings\Temporary Internet Files\*.%%a" "D:\IE缓存\%%a文件\" /S /Q /H /Y /C
- ping 127.0.0.1 -n 3 >nul 2>nul
-
- )
- goto DKK
复制代码
作者: lujice 时间: 2012-2-5 13:23
回复 lujice
:copy 修改为,2楼的全部代码已经更新
ivor 发表于 2012-2-5 12:45
谢谢您!!成功了!!
您写在8楼的这段代码,简明易懂,正适合于我这种初学者学习!!
再一次谢谢您!!
作者: cjiabing 时间: 2012-2-5 19:04
回复 6# lujice
谢谢指点!~那是个未完成的代码,不便大家阅读已删掉了。- if not exist "%~dp0GetTmp" md "%~dp0GetTmp"
这句的意义类似md "%~dp0GetTmp">nul 2>nul,罗嗦了点!~
作者: lujice 时间: 2012-2-5 19:09
回复 lujice
谢谢指点!~那是个未完成的代码,不便大家阅读已删掉了。if not exist "%~dp0Ge ...
cjiabing 发表于 2012-2-5 19:04
我这么菜的水平......斑竹居然如此谦虚......
:L 汗!爆汗!!瀑布汗!!
只希望斑竹以后能多帮帮我!!
预先谢谢了!!
作者: cjiabing 时间: 2012-2-8 15:10
回复 11# lujice
大家相互学习!
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |