Board logo

标题: [文件操作] [已解决]如何精简IE缓存提取工具的批处理文件? [打印本页]

作者: lujice    时间: 2012-2-4 18:49     标题: [已解决]如何精简IE缓存提取工具的批处理文件?

我正在尝试用批处理写一些简单的工具。下面这个“IE缓存提取工具.bat”,就是我的一次尝试。试着运行,效果还可以。但是,代码也太庸长、太重复了吧!!

问题已经解决。大家修改后的“最终代码”如下——
  1. @echo off
  2. color 0a&mode con cols=70 lines=18&title 欢迎使用“IE缓存提取器”!!
  3. set LJ=%cd%
  4. set CS=%UserProfile%\Local Settings\Temporary Internet Files\Content.IE5
  5. :IE
  6. cls&echo.&echo.
  7. echo.                   ——欢迎使用“IE缓存提取器”!!
  8. echo.
  9. echo.                 ╭───────────────╮
  10. echo.       ╭────┤  请选择,您要执行的操作——  ├─────╮
  11. echo.       │        ╰───────────────╯          │
  12. echo.       │     0: 清空IE缓存              3: 提取常见图片     │
  13. echo.       │                                                    │
  14. echo.       │     1: 提取常见视频            4: 提取常见文档     │
  15. echo.       │                                                    │
  16. echo.       │     2: 提取常见音频            5: 提取指定文件     │
  17. echo.       ╰──────────────────────────╯
  18. echo.                  作者:溪水听冬   QQ:471 996 462
  19. echo.&set /p IE=         输入您选择的“数字”后,请敲回车:
  20. attrib -s -h -r "%CS%\*.*" /s /d >nul 2>nul
  21. set SP=FLV mp4 RM RMVB WMV AVI ASF 3GP DivX
  22. set YP=MP3 WMA WAV CDA APE FLAC OGG AAC
  23. set TP=BMP GIF JPG PNG TGA SVG
  24. set WD=TXT PDF RTF CHM HLP DOC XLS PPT
  25. if /i "%IE%"=="0" goto QK
  26. if /i "%IE%"=="1" call :copy %SP%
  27. if /i "%IE%"=="2" call :copy %YP%
  28. if /i "%IE%"=="3" call :copy %TP%
  29. if /i "%IE%"=="4" call :copy %WD%
  30. if /i "%IE%"=="5" goto ZD
  31. cls
  32. echo.&echo.&echo.         你输入的“ %IE% ”无效!!
  33. echo.&echo.&echo.         别调皮了,返回重新输入吧!!!
  34. echo.&echo.&pause
  35. goto IE
  36. :QK
  37. cls
  38. echo.&echo.&echo.             ——为了保证“IE缓存”删除干净,
  39. echo.&echo.&echo.         即将关闭 "IE 进程" 和 "视窗进程"...
  40. ping 127.0.0.1 -n 3 >nul 2>nul
  41. CD "%CS%\"
  42. taskkill /f /im explorer.exe >nul 2>nul
  43. taskkill /f /im iexplore.exe >nul 2>nul
  44. rd /s /q "%CS%\" >nul 2>nul
  45. del /f /s /q "%CS%\*.*" >nul 2>nul
  46. start explorer.exe >nul 2>nul
  47. CD %LJ%
  48. goto IE
  49. :copy
  50. cls
  51. set DQ=%1 %2 %3 %4 %5 %6 %7 %8 %9
  52. for %%a in (%DQ%) do (
  53. echo.&echo.         正在提取 %%a 文件...
  54. echo.&xcopy "%CS%\*.%%a" "%LJ%\IE缓存\%%a文件\" /S /Q /H /Y /C
  55. ping 127.0.0.1 -n 3 >nul 2>nul
  56. )
  57. goto END
  58. :ZD
  59. cls&echo.&echo.
  60. echo.                    ——即将提取您指定的文件!!
  61. echo.
  62. echo.                 ╭───────────────╮
  63. echo.       ╭────┤  请指定:您要提取的文件格式  ├─────╮
  64. echo.       │        ╰───────────────╯          │
  65. echo.       │      例如: 提取“图标文件”,就输入 —— ICO       │
  66. echo.       │                                                    │
  67. echo.       │      又如: 提取“广告动画”,就输入 —— SWF       │
  68. echo.       ╰──────────────────────────╯
  69. echo.&echo.&set /p ZD=         输入您选择的“文件后缀名”后,请敲回车:
  70. cls&echo.&echo.         正在提取 %ZD% 文件...
  71. echo.&xcopy "%CS%\*.%ZD%" "%LJ%\IE缓存\%ZD%文件\" /S /Q /H /Y /C
  72. ping 127.0.0.1 -n 3 >nul 2>nul
  73. goto END
  74. :END
  75. cls
  76. if exist "%LJ%\IE缓存\" (goto CG)
  77. echo.&echo.&echo.         “IE缓存目录” 中,没有您要提取的文件!!
  78. echo.&echo.&echo.         请浏览一次相应网页后,再来提取!!
  79. echo.&echo.&pause
  80. goto IE
  81. :CG
  82. attrib -s -h -r "%LJ%\IE缓存\*.*" /s /d
  83. echo.&echo.         资源已提取到“%LJ%\IE缓存”目录中!
  84. echo.&echo.         如要提取其它格式的缓存文件,请返回主菜单,
  85. echo.&echo.         运行“提取指定文件”选项!
  86. echo.&pause
  87. goto IE
复制代码

作者: ivor    时间: 2012-2-4 19:27

本帖最后由 ivor 于 2012-2-10 13:16 编辑

囧        太多代码了,打酱油路过,
本来不想看了,这代码太臃肿了,楼主试试吧,现在精简掉了了很多代码了,我没有测试。。

对你的K 块代码,好几处不解,
cd 命令用得到吗?你删除文件都已经指定了绝对路径
  1. @echo off
  2. color 0a&mode con cols=70 lines=18&title 欢迎使用“IE缓存提取器”!!
  3. :IE
  4. cls&echo.&echo.
  5. echo.                   ——欢迎使用“IE缓存提取器”!!
  6. echo.
  7. echo.                 ╭───────────────╮
  8. echo.       ╭────┤  请选择,您要执行的操作——  ├─────╮
  9. echo.       │        ╰───────────────╯          │
  10. echo.       │     0: 清空IE缓存              3: 提取常见图片     │
  11. echo.       │                                                    │
  12. echo.       │     1: 提取常见视频            4: 提取常见文档     │
  13. echo.       │                                                    │
  14. echo.       │     2: 提取常见音频            5: 提取指定文件     │
  15. echo.       ╰──────────────────────────╯
  16. echo.                  作者:溪水听冬   QQ:471 996 462
  17. echo.&set /p IE=         输入您选择的“数字”后,请敲回车:
  18. attrib -s -h -r "%UserProfile%\Local Settings\*.*" /s /d >nul 2>nul
  19. REM /*************初始化文件后缀名
  20. set audio=MP3 WMA WAV CDA APE FLAC OGG AAC
  21. set vedio=FLV mp4 RM RMVB WMV AVI 3GP DivX
  22. set picture=BMP GIF JPG PNG BMP
  23. set document=TXT PDF RTF CHM HLP DOC XLS PPT
  24. REM ***********************************/
  25. if /i "%IE%"=="0" goto QK
  26. REM /************CALL调用:copy过程*******
  27. if /i "%IE%"=="1" call :copy %vedio%
  28. if /i "%IE%"=="2" call :copy %audio%
  29. if /i "%IE%"=="3" call :copy %picture%
  30. if /i "%IE%"=="4" call :copy %document%
  31. REM ***********************************/
  32. if /i "%IE%"=="5" goto ZD
  33. cls
  34. echo.&echo.&echo.         你输入的“ %IE% ”无效!!
  35. echo.&echo.&echo.         别调皮了,返回重新输入吧!!!
  36. echo.&echo.&pause
  37. goto IE
  38. REM /**cd 命令不该用的地方。已经被删除,如果有错误再添加回去
  39. :QK
  40. cls
  41. echo.&echo.&echo.             ——为了保证“IE缓存”删除干净,
  42. echo.&echo.&echo.         即将关闭 "IE 进程" 和 "视窗进程"...
  43. ping 127.0.0.1 -n 3 >nul 2>nul
  44. taskkill /f /im explorer.exe >nul 2>nul
  45. taskkill /f /im iexplore.exe >nul 2>nul
  46. rd /s /q "%userprofile%\Local Settings\History\"
  47. rd /s /q "%userprofile%\Local Settings\Temporary Internet Files\"
  48. del /f /s /q "%userprofile%\Local Settings\History\*.*"
  49. del /f /s /q "%userprofile%\Local Settings\Temporary Internet Files\*.*"
  50. REM ***********************************//////
  51. goto IE
  52. REM /*多个提取过程因为有相同属性,集合到了一块代码,采用CALL传值
  53. :copy
  54. cls
  55. for %%a in (%*) do (
  56.         echo.&echo.         正在提取 %%a 文件...
  57. echo.&xcopy "%UserProfile%\Local Settings\Temporary Internet Files\*.%%a" "D:\IE缓存\%%a文件\" /S /Q /H /Y /C
  58. ping 127.0.0.1 -n 3 >nul 2>nul
  59. )
  60. goto DK
  61. REM ****************************************************//
  62. :ZD
  63. cls&echo.&echo.
  64. echo.                   ——即将提取您指定格式的文件!!
  65. echo.
  66. echo.                 ╭───────────────╮
  67. echo.       ╭────┤  请指定:您要提取的文件格式  ├─────╮
  68. echo.       │        ╰───────────────╯          │
  69. echo.       │      例如: 提取“图标文件”,就输入 —— ICO       │
  70. echo.       │                                                    │
  71. echo.       │      又如: 提取“广告动画”,就输入 —— SWF       │
  72. echo.       ╰──────────────────────────╯
  73. echo.&echo.&set /p ZD=         输入您选择的“文件后缀名”后,请敲回车:
  74. cls&echo.&echo.         正在提取 %ZD% 文件...
  75. echo.&xcopy "%UserProfile%\Local Settings\Temporary Internet Files\*.%ZD%" "D:\IE缓存\%ZD%文件\" /S /Q /H /Y /C
  76. ping 127.0.0.1 -n 3 >nul 2>nul
  77. goto DK
  78. :DK
  79. cls
  80. echo.&echo.             —— 您要提取的文件,已经全部提取到
  81. echo.&echo.         “D:\IE缓存\”文件夹中的相应目录!!
  82. echo.&echo.         如要提取IE浏览器的、其它格式的缓存文件,
  83. echo.&echo.         请返回主菜单,运行“提取指定文件”选项!
  84. echo.&pause
  85. if exist "D:\IE缓存\" (attrib -s -h -r "D:\IE缓存\*.*" /s /d &start "" "D:\IE缓存\")
  86. goto IE
复制代码

作者: cjiabing    时间: 2012-2-4 21:59

本帖最后由 cjiabing 于 2012-2-5 19:02 编辑
  1. @echo off
  2. ::查看临时文件(通用)
  3. start "" "C:\Documents and Settings\Administrator\Local Settings\Temporary Internet Files\Content.IE5"
  4. for /f "tokens=* delims=" %%a in ('dir /a /b /s "%userprofile%\Local Settings\Temporary Internet Files\*.*"') do echo %%a
  5. pause
复制代码

应该不用setlocal,不懂怎么放进去了?!
  1. @echo off&setlocal enabledelayedexpansion&::by cjiabing&from http://hi.baidu.com/cjiabing
  2. title 查找和提取缓存文件
  3. ::提取临时文件指定文件名
  4. :GetTempFileName
  5. cls
  6. echo.
  7. echo,
  8. echo;    可以加入后缀名,如:mynetwork.html
  9. echo;    可以加入通配符,如:*qq*    *.jpg
  10. echo;
  11. set input=
  12. set /p input=    输入文件名:
  13. echo.&set num=0
  14. set "padd=%~dp0"
  15. cd /d  "C:\Documents and Settings\Administrator\Local Settings\Temporary Internet Files\Content.IE5"
  16. echo:-------------------------------------------------------------------------
  17. for /f "tokens=*" %%a in ('dir %input% /b /s') do (set /a num+=1&echo;【!num!】%%~nxa&echo;%%~sdpa&echo;%%~tzaa&echo;)
  18. set inport=
  19. set /p inport=    是否提取文件【Y/Enter】输入数字提取指定行:
  20. if "%inport%"=="" goto GetTempFileName
  21. set js=0
  22. for /f "tokens=*" %%a in ('dir %input% /b /s') do (
  23.     set /a js+=1
  24.     if /i "%inport%"=="Y" copy "%%~a" "%padd%"
  25.     if /i "%inport%"=="!js!" copy "%%~a" "%padd%"
  26. )
  27. echo;
  28. echo    提取结束,请查看当前目录!
  29. echo;
  30. pause
  31. goto GetTempFileName
复制代码

作者: find    时间: 2012-2-4 23:01

回复 2# ivor
  1. if "%IE%"=="0" (
  2.     goto :QK
  3. ) else if "%IE%"=="1" (
  4.     call :copy %vedio%
  5. ) else if "%IE%"=="2" (
  6.     call :copy %audio%
  7. ) else if "%IE%"=="3" (
  8.     call :copy %picture%
  9. ) else if "%IE%"=="4" (
  10.     call :copy %document%
  11. ) else if "%IE%"=="5" (
  12.     goto :ZD
  13. )
复制代码

作者: 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
见有这个半拉子工程也拿出来了,可能未完成!


有两段代码不懂,麻烦斑竹逐句解释一下,我太笨!!
  1. if %input%==2 set "type=*.jpg *.jpeg *.gif bmp *.png *.tiff *.PSD"&goto _TREE
复制代码
  1. :_TREE
  2. if not exist "%~dp0GetTmp" md "%~dp0GetTmp"
  3. for /d %%a in ("%userprofile%\Local Settings\Temporary Internet Files\Content.IE5\*") do (
  4.     echo:%%a&cd /d %%a
  5.     for /r  %%i in (%TYPE%) do (
  6.         if exist "%~dp0GetTmp\%%~na" (Xcopy /s /y "%%~i" "%~dp0GetTmp\%%~na") else (md "%~dp0GetTmp\%%~na"&Xcopy /s /y "%%~i" "%~dp0GetTmp\%%~na")
  7.     )
  8. )
  9. cd /d %~dp0
  10. cls&dir /b "%~dp0GetTmp"
  11. pause&goto start
复制代码
不过我感觉,斑竹的代码还可以精简!!

    因为复制文件,不用判断“最后存放目录”是否存在;也不用专门写代码建立“最后存放目录”。

    比如这段简单的代码——
  1. @echo off
  2. cls&echo.&echo.         正在提取 MP3 文件...
  3. echo.&xcopy "%UserProfile%\Local Settings\Temporary Internet Files\Content.IE5\*.MP3" "%CD%\IE缓存\MP3文件\" /S /Q /H /Y /C
  4. ping 127.0.0.1 -n 3 >nul 2>nul
  5. exit
复制代码
注意——把"%CD%\IE缓存\MP3文件\",写作"%CD%\IE缓存\MP3文件",批处理就不能自动建立“最后存放目录”了!!

其中的变量%CD%,是系统默认的批处理当前目录。请看——
  1. @echo off
  2. echo.&echo.     当前盘符:%~d0
  3. echo.&echo.     当前盘符和路径:%~dp0
  4. echo.&echo.     当前批处理全路径:%~f0
  5. echo.&echo.     当前盘符和路径的短文件名格式:%~sdp0
  6. echo.&echo.     当前CMD默认目录:%cd%
  7. echo.&pause
  8. 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楼的全部代码已经更新
  1. :copy
  2. cls
  3. set suffix=%1 %2 %3 %4 %5 %6 %7 %8
  4. for %%a in (%suffix%) do (
  5.         echo.&echo.         正在提取 %%a 文件...
  6. echo.&xcopy "%UserProfile%\Local Settings\Temporary Internet Files\*.%%a" "D:\IE缓存\%%a文件\" /S /Q /H /Y /C
  7. ping 127.0.0.1 -n 3 >nul 2>nul
  8. )
  9. 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


    谢谢指点!~那是个未完成的代码,不便大家阅读已删掉了。
作者: 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://www.bathome.net/) Powered by Discuz! 7.2