Board logo

标题: [已解决]20求优化批处理并在写出文本时计算出每个文件的大小并从大到小排序 [打印本页]

作者: 小渣飞    时间: 2019-8-2 10:42     标题: [已解决]20求优化批处理并在写出文本时计算出每个文件的大小并从大到小排序

本帖最后由 小渣飞 于 2019-8-3 15:48 编辑

搬了论坛的一些代码零零散散写了个小脚本,想要写出来的结果是这样的
原来是这样:
文件已找到。["C:\Program Files\360\360safe\360AppLoader.exe"]

改之后想要这样的效果

文件已找到,大小为 [378KB] ["C:\Program Files\360\360safe"]
文件已找到,大小为 [342KB] ["C:\Program Files\360\360safe\360DeskAna.exe"]

难的话价钱可以加=-=
  1. @echo off&setlocal enabledelayedexpansion
  2. :main
  3. color 0c
  4. if not exist %temp%\~found md %temp%\~found||(
  5. call:_colstr 0c:"文件夹创建失败,按任意键退出。"&pause>nul&exit
  6. )
  7. set "file=0"&set "s="&set "e="&set "t="&set "k="&set "n="&set "d="&set "y="
  8. :return
  9. set "num=%random%"
  10. if exist %temp%\~found\found_%num%.log (echo 发现同名文件[found_%num%.log],正在更换,如长时间未能成功请清理文件夹 [%temp%\~found] 。&title 发现同名文件[found_%num%.log],正在更换可用文件。&cls&goto return)
  11. cls
  12. echo.>%temp%\~found\found_%num%.log
  13. title 全盘查找。
  14. set "var="
  15. echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.
  16. call:_colstr 0f:"要查找的文件 [需添加文件扩展名,如查找同类文件可使用通配符]";\t
  17. echo *.*
  18. echo.
  19. call:_colstr 0e:"禁止输入以下等特殊符号:"
  20. echo [ ^| / \^" ^< ^> ? : * ]
  21. echo.
  22. call:_colstr 08:"%num%";0a:"在这里输入需要查找的文件:"
  23. set /p "var="
  24. echo %var%|find /i "*." >nul && set "int=同类" || set "int=指定"
  25. echo %var%|find /i " " >nul && (echo.&echo 值不能为空或输入的字符串内含有空格。&pause>nul&goto:main)
  26. if "%var%"=="/del*" (echo 正在执行删除操作,请稍后。&del %temp%\~found&goto main) else (if "%var%"=="/help" (goto help) else (if "%var%"=="<" (goto main) else (if "%var%"==">" (goto main) else (if "%var%"=="|" (goto main) else (if "%var%"=="*" (goto main) else (if "%var%"==":" (goto main) else (if "%var%"=="/" (goto main) else (if "%var%"=="\" (goto main) else (if "%var%"=="?" (goto main) else (if "%var%"=="/exit" (exit)))))))))))
  27. call:k
  28. color 00
  29. title 正在查找%var%中... ...
  30. set "#time=:::::::::::::::::::: %date% / %time% Start ::::::::::::::::::::"
  31. echo.
  32. color 07&echo 正在全盘查找文件 [ %var% ]
  33. echo.
  34. for %%a in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
  35. if exist %%a:\ (
  36. cd /d %%a:\
  37. for /f "delims=" %%b in ('dir /s /a-d /b %var% 2^>nul') do (
  38. set /a "file+=1"
  39. if exist "%%b" (
  40. echo 文件已找到。["%%b"]>>%temp%\~found\found_%num%.log))))
  41. call:k
  42. set/a D=D2-D1,K=K2-K1
  43. if %K% leq 0 set/a K+=8640000,D-=1
  44. if %D% leq 0 (set "s=%K%0毫秒")else set "s=%D%天%K%0毫秒"
  45. pushd %temp%\~found
  46. ren found_%num%.log data_%num%.log
  47. (
  48. echo.
  49. echo %#time%
  50. echo.
  51. echo 查找%int%文件 [ %var% ],共找到 [ %file% ] 个文件,耗时 [ %s% ] 。
  52. )>>found_%num%.log
  53. type data_%num%.log>>found_%num%.log
  54. echo.>>found_%num%.log
  55. find "文件已找到。" found_%num%.log >nul||(
  56. echo 没有找到任何文件,输入 [ /help ] 获取帮助。
  57. echo.
  58. )>>found_%num%.log
  59. echo ::::::::::::::::::: %date% / %time% Finished :::::::::::::::::::>>found_%num%.log
  60. title 共找到 [ %file% ] 个文件,耗时 [ %s% ] 已生成文本报告。
  61. type %temp%\~found\found_%num%.log&color 0f
  62. echo.
  63. call:_colstr 0e:"正在拷贝路径至粘贴板,请稍后。";\n;&mshta vbscript:clipboarddata.setdata("text","%temp%\~found\found_%num%.log")(close)
  64. echo.
  65. call:_colstr 查找完毕,共找到;\t;[;\t;0a:"%file%";\t;];\t;个文件,耗时;\t;[;\t;0a:"%s%";\t;];\t;0f:"已生成文本报告。";\n;
  66. echo.
  67. call:_colstr 路径;\t;[ "%temp%\~found\found_%num%.log" ];\t;0e:"已复制。";\n;
  68. echo.&echo.
  69. call:_colstr \t;\t;\t;\t;\t;\t;\t;\t;\t;\t;\t;\t;\t;\t;J;0b:"e";0e:"ff";0f:"r";0a:"e";0d:"y";06:"2";05:"9";04:"7";03:"1";f8:"@outlook.com";\t;\t;
  70. echo.&echo.&pause>nul
  71. call:_colstr 0e:"正在清理粘贴板,请稍后。";&mshta.exe "javascript:clipboardData.clearData();close();"
  72. popd&goto main
  73. :help
  74. title 帮助。
  75. cls&echo.
  76. call:_colstr 0e:"正在计算相关数据,请稍后。";\n;
  77. set "cnt=0"&set "f="&set "d="
  78. for /f "delims=" %%i in ('dir/b/a-d "%temp%\~found\*.log" 2^>nul') do set /a "cnt+=1"
  79. for /f "tokens=3 delims= " %%i in ('dir /s /a /-c "%temp%\~found" ^|findstr 个文件') do (set f=%%i)
  80. if %f% gtr 1024 (set /a "f>>=10"&set "d=KB") else (if %f% gtr 1024 (set /a "f>>=10"&set "d=MB"))
  81. cls
  82. echo.&echo.
  83. call:_colstr 0e:"禁止输入以下等特殊符号:"
  84. echo [ ^| / \^" ^< ^> ? : * ]
  85. echo.
  86. call:_colstr 0f:"查找时输入尽量正确的";0e:"文件名";+;0e:"扩展名";0f:"如";0f:"[";0a:"WeChat.exe";0f:"]";\n;
  87. echo.
  88. call:_colstr 0f:"如需查找同类文件如图片" [ *.png/*.jpg ] ;0f:"可使用";0e:"通配符" 0f:"["; * ;0f:"]" . ;0f:"[" 文件扩展名 ;0f:"]";\n
  89. echo.
  90. call:_colstr 0f:"共找到";\t;0f:"[";\t;0a:"%cnt%";\t;0f:"]";\t;0f:"个报告文件,占用空间";\t;0f:"[";\t;0e:"%f%%d%";\t;0f:"]";\t; ;0f:"如需删除可在界面输入";\t;/del*;\n
  91. echo.
  92. call:_colstr 0f:"文件记录位于";\t;[;\t;%temp%\~found;\t;];\t;0f:"格式为";\t;*.log;\n
  93. echo.&echo.
  94. call:_colstr 0f:"如需额外帮助请联系邮箱:";J;0b:"e";0e:"ff";0f:"r";0a:"e";0d:"y";06:"2";05:"9";04:"7";03:"1";f8:"@outlook.com";\t;\t;\t;\t;0f:"联系微信:";J;0b:"e";0e:"ff";0f:"r";0a:"e";0d:"y";06:"2";05:"9";04:"7";03:"1";\n;
  95. echo.
  96. echo 按任意键返回。
  97. echo.
  98. pause>nul&goto main
  99. rem /*--------- colstr 函数 -------------
  100. rem /*\?"<:>|
  101. :_colstr [^<colorcode^>:"<color str>"^|"<common str>"^|^<escape Char^>];...
  102. for /f "tokens=1* delims=:" %%a in ("%~1")do (
  103.   if %%a:%%b.==%%a:"%%~b". (set col=%%a
  104.     for %%z in ("LBlue=9";"LGreen=A";"LAqua=B";"LRed=C";"LPurple=D";
  105.                 "LYellow=E";"LWhite=F";"Black=0";"Blue=1";"Green=2";
  106.                 "Aqua=3";"Red=4";"Purple=5";"Yellow=6";"White=7";"Gray=8";
  107.                )do set col=!col:%%~z!
  108.       if exist "%%~b?" del/a/q "%%~b?"2>nul
  109.       set/p= <nul>"%%~b"2>nul&findstr/a:!col! .* "%%~b?"2>nul 3>&2
  110.     ) else if %1==\n (echo.
  111.     ) else if %1==\b (set/p=<nul
  112.     ) else if %1==\q (set/p=""^"<nul
  113.     ) else if %1==\t (set/p= <nul &rem 注意=后面不是空格,是制表符
  114.     ) else (set/p"=%~1"<nul)
  115. )&(if %2. neq . (shift&endlocal&goto:_colstr))&exit/b
  116. rem ------------------------------------*/
  117. :k
  118. set "E=%date%"&set "T=%time%"&set "K=%time:~0,2%"&set/a "N+=1"
  119. set/a D%N%=1%E:~8,2%%%100,M=1%E:~5,2%%%100-1,Y=%E:~0,4%,"K%N%=%K: =%*360000+(1%T:~3,2%-100)*6000+(1%T:~6,2%-100)*100+1%T:~9,2%-100"
  120. for /l %%a in (1,1,%M%) do set/a "K=^!(%%a-4)|^!(%%a-6)|^!(%%a-9)|^!(%%a-11)","D%N%+=^!(%%a-2)*(28+^!((^!(Y%%4)&^!^!(Y%%100))|^!(Y%%400)))+K*30+(^!^!(%%a-2)&^!K)*31"
  121. set/a D%N%+=(Y-1)*365+Y/4-Y/100+Y/400
复制代码

作者: zaqmlp    时间: 2019-8-2 13:22

本帖最后由 zaqmlp 于 2019-8-2 13:28 编辑
  1. @echo off&setlocal enabledelayedexpansion
  2. :main
  3. color 0c
  4. if not exist %temp%\~found md %temp%\~found||(
  5. call:_colstr 0c:"文件夹创建失败,按任意键退出。"&pause>nul&exit
  6. )
  7. set "file=0"&set "s="&set "e="&set "t="&set "k="&set "n="&set "d="&set "y="
  8. :return
  9. set "num=%random%"
  10. if exist %temp%\~found\found_%num%.log (echo 发现同名文件[found_%num%.log],正在更换,如长时间未能成功请清理文件夹 [%temp%\~found] 。&title 发现同名文件[found_%num%.log],正在更换可用文件。&cls&goto return)
  11. cls
  12. cd .>%temp%\~found\data_%num%.log
  13. title 全盘查找。
  14. set "var="
  15. echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.
  16. call:_colstr 0f:"要查找的文件 [需添加文件扩展名,如查找同类文件可使用通配符]";\t
  17. echo *.*
  18. echo.
  19. call:_colstr 0e:"禁止输入以下等特殊符号:"
  20. echo [ ^| / \^" ^< ^> ? : * ]
  21. echo.
  22. call:_colstr 08:"%num%";0a:"在这里输入需要查找的文件:"
  23. set /p "var="
  24. echo %var%|find /i "*." >nul && set "int=同类" || set "int=指定"
  25. echo %var%|find /i " " >nul && (echo.&echo 值不能为空或输入的字符串内含有空格。&pause>nul&goto:main)
  26. if "%var%"=="/del*" (echo 正在执行删除操作,请稍后。&del %temp%\~found&goto main) else (if "%var%"=="/help" (goto help) else (if "%var%"=="<" (goto main) else (if "%var%"==">" (goto main) else (if "%var%"=="|" (goto main) else (if "%var%"=="*" (goto main) else (if "%var%"==":" (goto main) else (if "%var%"=="/" (goto main) else (if "%var%"=="\" (goto main) else (if "%var%"=="?" (goto main) else (if "%var%"=="/exit" (exit)))))))))))
  27. call:k
  28. color 00
  29. title 正在查找%var%中... ...
  30. set "#time=:::::::::::::::::::: %date% / %time% Start ::::::::::::::::::::"
  31. echo.
  32. color 07&echo 正在全盘查找文件 [ %var% ]
  33. echo.
  34. for %%a in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
  35. if exist %%a:\ (
  36. cd /d %%a:\
  37. for /f "delims=" %%b in ('dir /s /a-d /b "%var%" 2^>nul') do (
  38. set /a "file+=1"
  39. if exist "%%b" (
  40. echo %%~zb^|"%%b">>%temp%\~found\data_%num%.log))))
  41. call:k
  42. set/a D=D2-D1,K=K2-K1
  43. if %K% leq 0 set/a K+=8640000,D-=1
  44. if %D% leq 0 (set "s=%K%0毫秒")else set "s=%D%天%K%0毫秒"
  45. >"%tmp%\t.t" echo;var list=WSH.StdIn.ReadAll().replace(/^^\s*^|\s*$/g,'').split(/[\r\n]+/);
  46. >>"%tmp%\t.t" echo;list.sort(function(a,b){return Number(b.split('^|')[0])-Number(a.split('^|')[0])});
  47. >>"%tmp%\t.t" echo;for(var i=0;i^<list.length;i++){var line=list[i].split('^|');WSH.echo('文件已找到,大小为['+getsize(Number(line[0]))+']['+line[1]+']');}
  48. >>"%tmp%\t.t" echo;function getsize(s){var size='';if(s^>=1073741824){size = (s/1073741824).toFixed(2) + 'GB';}else if(s^>=1048576){size = (s/1048576).toFixed(2) + 'MB';}else if(s^>=1024){size = (s/1024).toFixed(2) + 'KB';}else {size = s + 'B';};return size;}
  49. pushd %temp%\~found
  50. rem ren found_%num%.log data_%num%.log
  51. (
  52. echo.
  53. echo %#time%
  54. echo.
  55. echo 查找%int%文件 [ %var% ],共找到 [ %file% ] 个文件,耗时 [ %s% ] 。
  56. )>found_%num%.log
  57. type data_%num%.log|cscript -nologo -e:jscript "%tmp%\t.t">>found_%num%.log
  58. echo.>>found_%num%.log
  59. find "文件已找到" found_%num%.log >nul||(
  60. echo 没有找到任何文件,输入 [ /help ] 获取帮助。
  61. echo.
  62. )>>found_%num%.log
  63. echo ::::::::::::::::::: %date% / %time% Finished :::::::::::::::::::>>found_%num%.log
  64. title 共找到 [ %file% ] 个文件,耗时 [ %s% ] 已生成文本报告。
  65. type %temp%\~found\found_%num%.log&color 0f
  66. echo.
  67. call:_colstr 0e:"正在拷贝路径至粘贴板,请稍后。";\n;&mshta vbscript:clipboarddata.setdata("text","%temp%\~found\found_%num%.log")(close)
  68. echo.
  69. call:_colstr 查找完毕,共找到;\t;[;\t;0a:"%file%";\t;];\t;个文件,耗时;\t;[;\t;0a:"%s%";\t;];\t;0f:"已生成文本报告。";\n;
  70. echo.
  71. call:_colstr 路径;\t;[ "%temp%\~found\found_%num%.log" ];\t;0e:"已复制。";\n;
  72. echo.&echo.
  73. call:_colstr \t;\t;\t;\t;\t;\t;\t;\t;\t;\t;\t;\t;\t;\t;J;0b:"e";0e:"ff";0f:"r";0a:"e";0d:"y";06:"2";05:"9";04:"7";03:"1";f8:"@outlook.com";\t;\t;
  74. echo.&echo.&pause>nul
  75. call:_colstr 0e:"正在清理粘贴板,请稍后。";&mshta.exe "javascript:clipboardData.clearData();close();"
  76. popd&goto main
  77. :help
  78. title 帮助。
  79. cls&echo.
  80. call:_colstr 0e:"正在计算相关数据,请稍后。";\n;
  81. set "cnt=0"&set "f="&set "d="
  82. for /f "delims=" %%i in ('dir/b/a-d "%temp%\~found\*.log" 2^>nul') do set /a "cnt+=1"
  83. for /f "tokens=3 delims= " %%i in ('dir /s /a /-c "%temp%\~found" ^|findstr 个文件') do (set f=%%i)
  84. if %f% gtr 1024 (set /a "f>>=10"&set "d=KB") else (if %f% gtr 1024 (set /a "f>>=10"&set "d=MB"))
  85. cls
  86. echo.&echo.
  87. call:_colstr 0e:"禁止输入以下等特殊符号:"
  88. echo [ ^| / \^" ^< ^> ? : * ]
  89. echo.
  90. call:_colstr 0f:"查找时输入尽量正确的";0e:"文件名";+;0e:"扩展名";0f:"如";0f:"[";0a:"WeChat.exe";0f:"]";\n;
  91. echo.
  92. call:_colstr 0f:"如需查找同类文件如图片" [ *.png/*.jpg ] ;0f:"可使用";0e:"通配符" 0f:"["; * ;0f:"]" . ;0f:"[" 文件扩展名 ;0f:"]";\n
  93. echo.
  94. call:_colstr 0f:"共找到";\t;0f:"[";\t;0a:"%cnt%";\t;0f:"]";\t;0f:"个报告文件,占用空间";\t;0f:"[";\t;0e:"%f%%d%";\t;0f:"]";\t; ;0f:"如需删除可在界面输入";\t;/del*;\n
  95. echo.
  96. call:_colstr 0f:"文件记录位于";\t;[;\t;%temp%\~found;\t;];\t;0f:"格式为";\t;*.log;\n
  97. echo.&echo.
  98. call:_colstr 0f:"如需额外帮助请联系邮箱:";J;0b:"e";0e:"ff";0f:"r";0a:"e";0d:"y";06:"2";05:"9";04:"7";03:"1";f8:"@outlook.com";\t;\t;\t;\t;0f:"联系微信:";J;0b:"e";0e:"ff";0f:"r";0a:"e";0d:"y";06:"2";05:"9";04:"7";03:"1";\n;
  99. echo.
  100. echo 按任意键返回。
  101. echo.
  102. pause>nul&goto main
  103. rem /*--------- colstr 函数 -------------
  104. rem /*\?"<:>|
  105. :_colstr [^<colorcode^>:"<color str>"^|"<common str>"^|^<escape Char^>];...
  106. for /f "tokens=1* delims=:" %%a in ("%~1")do (
  107.   if %%a:%%b.==%%a:"%%~b". (set col=%%a
  108.     for %%z in ("LBlue=9";"LGreen=A";"LAqua=B";"LRed=C";"LPurple=D";
  109.                 "LYellow=E";"LWhite=F";"Black=0";"Blue=1";"Green=2";
  110.                 "Aqua=3";"Red=4";"Purple=5";"Yellow=6";"White=7";"Gray=8";
  111.                )do set col=!col:%%~z!
  112.       if exist "%%~b?" del/a/q "%%~b?"2>nul
  113.       set/p= <nul>"%%~b"2>nul&findstr/a:!col! .* "%%~b?"2>nul 3>&2
  114.     ) else if %1==\n (echo.
  115.     ) else if %1==\b (set/p=<nul
  116.     ) else if %1==\q (set/p=""^"<nul
  117.     ) else if %1==\t (set/p= <nul &rem 注意=后面不是空格,是制表符
  118.     ) else (set/p"=%~1"<nul)
  119. )&(if %2. neq . (shift&endlocal&goto:_colstr))&exit/b
  120. rem ------------------------------------*/
  121. :k
  122. set "E=%date%"&set "T=%time%"&set "K=%time:~0,2%"&set/a "N+=1"
  123. set/a D%N%=1%E:~8,2%%%100,M=1%E:~5,2%%%100-1,Y=%E:~0,4%,"K%N%=%K: =%*360000+(1%T:~3,2%-100)*6000+(1%T:~6,2%-100)*100+1%T:~9,2%-100"
  124. for /l %%a in (1,1,%M%) do set/a "K=^!(%%a-4)|^!(%%a-6)|^!(%%a-9)|^!(%%a-11)","D%N%+=^!(%%a-2)*(28+^!((^!(Y%%4)&^!^!(Y%%100))|^!(Y%%400)))+K*30+(^!^!(%%a-2)&^!K)*31"
  125. set/a D%N%+=(Y-1)*365+Y/4-Y/100+Y/400
复制代码

作者: 小渣飞    时间: 2019-8-2 13:45

回复 2# zaqmlp


    给你转了哈你看看
作者: zaqmlp    时间: 2019-8-2 14:30

回复 3# 小渣飞


    收到




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