[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[数值计算] 【已解决】BAT脚本kytes转换mb计算时超过32精确度

本帖最后由 赖渊 于 2021-5-11 06:41 编辑

我使用了普通的bat除法命令,然而会出现数值过大导致无法计算。
请问有大佬给个好点子吗?
http://www.bathome.net/viewthread.php?tid=3372

计算函数部分用的是这个,但是感觉除法这个帖子的函数太复杂了....
  1. PUSHD %~DP0 &TITLE 删除sewwo教学程序日志淤积(赖渊)
  2. @echo off&chcp 437>nul&setlocal enabledelayedexpansion
  3. for /f "delims=" %%l in ('dir "D:\" /a /s /-c ^| findstr /i "bytes$"') do (
  4. for /f "tokens=3 delims= " %%a in ("%%l") do (set 1=%%a)
  5. )
  6. echo !1! bytes %统计大小%
  7. set num=0
  8. for /f "delims=" %%i in ('dir F:\%1 /a-d /b /s') do @set /a num1+=1 %统计数目%
  9. ::第一次计算用户目录sewwo日志目录文件个数及大小
  10. for /f "delims=" %%l in ('dir "D:\" /a /s /-c ^| findstr /i "bytes$"') do (
  11.   for /f "tokens=3 delims= " %%a in ("%%l") do (set 2=%%a)
  12. )
  13. echo !2! bytes%统计大小%
  14. set num=0
  15. for /f "delims=" %%i in ('dir F:\%1 /a-d /b /s') do @set /a num2+=1 %统计数目%
  16. ::第一次计算系统目录sewwo日志目录文件个数及大小
  17. call :jia !1! !2! dx1
  18. echo %dx1% bytse
  19. call :jia %num1% %num2% sm1
  20. echo %sm1%
  21. ::第一次调用加法函数统计删除前日志目录总文件数及大小
  22. for /f "delims=" %%l in ('dir "D:\" /a /s /-c ^| findstr /i "bytes$"') do (
  23.   for /f "tokens=3 delims= " %%a in ("%%l") do (set 3=%%a)
  24. )
  25. echo !3! bytes %统计大小%
  26. set num=0
  27. for /f "delims=" %%i in ('dir F:\%1 /a-d /b /s') do @set /a num3+=1 %统计数目%
  28. ::第二次计算用户目录sewwo日志目录文件个数及大小
  29. for /f "delims=" %%l in ('dir "D:\" /a /s /-c ^| findstr /i "bytes$"') do (
  30.   for /f "tokens=3 delims= " %%a in ("%%l") do (set 4=%%a)
  31. )
  32. echo !4! bytes %统计大小%
  33. set num=0
  34. for /f "delims=" %%i in ('dir F:\%1 /a-d /b /s') do @set /a num4+=1 %统计数目%
  35. ::第二次计算系统目录sewwo日志目录文件个数及大小
  36. call :jia !3! !4! dx2
  37. echo %dx2% bytse
  38. call :jia %num3% %num4% sm2
  39. echo %sm2%
  40. ::第二次调用加法函数统计删除后日志目录文件数及总大小
  41. call :jian %dx1% %dx2% dx3
  42. echo %dx3% bytse
  43. ::计算前后空间减少的大小
  44. call :jian %sm1% %sm2% sm3
  45. echo %sm3%
  46. ::计算前后文件减少的数目
  47. set /a a=%dx1%,b=1048576
  48. set /a result=%a%/%b%
  49. echo %a%/%b%=%q%
  50. set /a a=%dx2%,b=1048576
  51. set /a result=%a%/%b%
  52. echo %a%/%b%=%h%
  53. set /a a=%dx3%,b=1048576
  54. set /a result=%a%/%b%
  55. echo %a%/%b%=%t%
  56. ::bytes转换成MB
  57. @echo off&CHCP 936>nul
  58. echo 清理前%q%MB,清理后%h%MB,共清理了%t%MB,总共%sm3%个文件
  59. echo laiyuanys.ys168.com
  60. pause > nul
  61. :jia 加法计算函数
  62. setlocal enabledelayedexpansion&set f=&set "t="
  63. set var1=%~1&set var2=%~2&set /a j=0,n1=0,n2=0
  64. for /l %%a in (0 1 9) do (set vard1=&set "vard2="
  65. set var1=!var1:%%a= %%a !&set var2=!var2:%%a= %%a !)
  66. for %%a in (!var1!)do (set/a n1+=1&set vard1=%%a !vard1!)
  67. for %%a in (!var2!)do (set/a n2+=1&set vard2=%%a !vard2!)
  68. (if !n1! lss !n2! (set var1=%var2%&set "var2=%var1%"
  69. set vard1=%vard2%&set vard2=%vard1%))&set "var2=!var2: =!"
  70. for %%a in (!vard1!) do (if "!var2!"=="" set /a var2=0
  71. set /a a=%%a+!var2:~-1!+j&set t=!a:~-1!!t!&set "a=0!a!"
  72. set "j=!a:~-2,1!"&set var2=!var2:~0,-1!)
  73. if !j! neq 0 set "t=!j!!t!"
  74. Endlocal&set %~3=%t%&goto :EOF
  75. :jian 减法计算函数
  76. setlocal enabledelayedexpansion&&set t=&set f=&set "lin="
  77. for /l %%a in (1 1 10) do set "lin=0000000000!lin!"
  78. set lin=!lin!!lin!!lin!!lin!!lin!&set "lin=!lin!!lin!"
  79. set var1=!lin!%~1&set var2=!lin!%~2&set vard1=&set/a j=0
  80. set var1=!var1:~-1000!&set "var2=!var2:~-1000!"
  81. if "!var1!" lss "!var2!" (set var1=%~2&set "var2=%~1"
  82. set "f=-") else set var1=%~1&set "var2=%~2"
  83. for /l %%a in (0 1 9) do set "var1=!var1:%%a= %%a !"
  84. for %%a in (!var1!) do set "vard1=%%a !vard1!"
  85. for %%a in (!vard1!) do (if "!var2!"=="" set/a var2=0
  86. set /a a=%%a-j,b=!var2:~-1!
  87. if !a! lss !b! (set /a a+=10,j=1)else set /a j=0
  88. set /a w=a-b&set t=!w!!t!&set var2=!var2:~0,-1!)
  89. for /f "tokens=* delims=0" %%a in ("!t!") do (
  90. if "%%a"=="" (set t=0) else set "t=%%a")
  91. Endlocal&set %~3=%f%%t%&goto :EOF
复制代码
bat脚本打算是用来删除班上电脑sewwo教学系列程序的日志淤积文件用的(大概2G左右)
路径还没有写入,这个无视就好。。。。

麻烦各位了。。。

TOP

用powershell 计算
  1. powershell -c " 10000000000000 /1024 /1024 /1024 /1024  "
复制代码
1

评分人数

TOP

回复 3# newswan

谢谢Thanks♪(・ω・)ノ,似乎能计算起来了,但是输出结果不知道怎么调用起来。。。。

TOP

回复 4# 赖渊
  1. @echo off
  2. for /f %%i in ('powershell -c "10000000000000 /1024 /1024 /1024 /1024"') do (
  3.     set "n=%%i"
  4. )
  5. echo %n%
  6. pause
复制代码
1

评分人数

我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 5# Batcher
  1. PUSHD %~DP0 &TITLE 清理sewwo教学程序日志淤积(赖渊)
  2. @echo off&chcp 437>nul&setlocal enabledelayedexpansion
  3. color 0a
  4. for /f "delims=" %%l in ('dir "%userprofile%\AppData\Roaming\Seewo" /a /s /-c ^| findstr /i "bytes$"') do (
  5. for /f "tokens=3 delims= " %%a in ("%%l") do (set 1=%%a)
  6. )
  7. echo !1! bytes %统计大小%
  8. set num=0
  9. for /f "delims=" %%i in ('dir %userprofile%\AppData\Roaming\Seewo%1 /a-d /b /s') do @set /a num1+=1 %统计数目%
  10. ::第一次计算用户目录sewwo日志目录文件个数及大小
  11. for /f "delims=" %%l in ('dir "%systemdrive%\ProgramData\Seewo" /a /s /-c ^| findstr /i "bytes$"') do (
  12.   for /f "tokens=3 delims= " %%a in ("%%l") do (set 2=%%a)
  13. )
  14. echo !2! bytes%统计大小%
  15. set num=0
  16. for /f "delims=" %%i in ('dir %systemdrive%\ProgramData\Seewo%1 /a-d /b /s') do @set /a num2+=1 %统计数目%
  17. ::第一次计算系统目录sewwo日志目录文件个数及大小
  18. call :jia !1! !2! dx1
  19. echo %dx1% bytse
  20. call :jia %num1% %num2% sm1
  21. echo %sm1%
  22. ::第一次调用加法函数统计删除前日志目录总文件数及大小
  23. @ echo on
  24. del /s /q "%userprofile%\AppData\Roaming\Seewo\EasiAssistant"
  25. del /s /q "%userprofile%\AppData\Roaming\Seewo\EasiCamera\Log"
  26. del /s /q "%userprofile%\AppData\Roaming\Seewo\EasiNote3C\Log"
  27. del /s /q "%userprofile%\AppData\Roaming\Seewo\EasiNote5\Log"
  28. del /s /q "%userprofile%\AppData\Roaming\Seewo\EasiRecorder\logs"
  29. del /s /q "%userprofile%\AppData\Roaming\Seewo\ECGuardian\Log"
  30. del /s /q "%userprofile%\AppData\Roaming\Seewo\SeewoAdClose"
  31. del /s /q "%userprofile%\AppData\Roaming\Seewo\SeewoLink\logs"
  32. del /s /q "%userprofile%\AppData\Roaming\Seewo\SeewoLinkService\logs"
  33. del /s /q "%userprofile%\AppData\Roaming\Seewo\SeewoService"
  34. del /s /q "%userprofile%\AppData\Roaming\Seewo\SeewoService5"
  35. del /s /q "%userprofile%\Desktop\Seewo\logs
  36. del /s /q "%userprofile%\AppData\Roaming\Seewo\SeewoServiceUpdater"
  37. del /s /q "%userprofile%\AppData\Roaming\Seewo\UpgraderTo41"
  38. del /s /q "%systemdrive%\ProgramData\Seewo\SeewoAdminService"
  39. del /s /q "%userprofile%\Desktop\Seewo\SeewoAdminService"
  40. del /s /q "%userprofile%\Desktop\Seewo\Easiupdate\easiupdate\logs"
  41. del /s /q "%userprofile%\Desktop\Seewo\SeewoGuard"
  42. del /s /q "%userprofile%\Desktop\Seewo\Easiupdate3Logs"
  43. del /s /q "%systemdrive%\ProgramData\Seewo\SeewoGuard"
  44. del /s /q "%systemdrive%\ProgramData\Seewo\Easiupdate3Logs"
  45. del /s /q "%systemdrive%\ProgramData\Seewo\logs"
  46. del /s /q "%systemdrive%\ProgramData\Seewo\LiveProxyGuard"
  47. del /s /q "%systemdrive%\ProgramData\Seewo\Easiupdate\easiupdate\logs"
  48. ::清理sewwo教学程序淤积日志文件
  49. ping 127.0.0.1 -n 2 >nul
  50. color 0C
  51. net stop wuauserv
  52. del /s /q "%systemdrive%\Windows\SoftwareDistribution\DataStore
  53. color 0a
  54. ping 127.0.0.1 -n 2 >nul
  55. net start wuauserv
  56. @ echo off
  57. for /f "delims=" %%l in ('dir "%userprofile%\AppData\Roaming\Seewo" /a /s /-c ^| findstr /i "bytes$"') do (
  58.   for /f "tokens=3 delims= " %%a in ("%%l") do (set 3=%%a)
  59. )
  60. echo !3! bytes %统计大小%
  61. set num=0
  62. for /f "delims=" %%i in ('dir F:\%1 /a-d /b /s') do @set /a num3+=1 %统计数目%
  63. ::第二次计算用户目录sewwo日志目录文件个数及大小
  64. for /f "delims=" %%l in ('dir "D:\" /a /s /-c ^| findstr /i "bytes$"') do (
  65.   for /f "tokens=3 delims= " %%a in ("%%l") do (set 4=%%a)
  66. )
  67. echo !4! bytes %统计大小%
  68. set num=0
  69. for /f "delims=" %%i in ('dir %systemdrive%\ProgramData\Seewo%1 /a-d /b /s') do @set /a num4+=1 %统计数目%
  70. ::第二次计算系统目录sewwo日志目录文件个数及大小
  71. call :jia !3! !4! dx2
  72. echo %dx2% bytse
  73. call :jia %num3% %num4% sm2
  74. echo %sm2%
  75. ::第二次调用加法函数统计删除后日志目录文件数及总大小
  76. call :jian %dx1% %dx2% dx3
  77. echo %dx3% bytse
  78. ::计算前后空间减少的大小
  79. call :jian %sm1% %sm2% sm3
  80. echo %sm3%
  81. ::计算前后文件减少的数目
  82. for /f %%i in ('powershell -c "%dx1% /1024 /1024"') do (
  83. set "q=%%i"
  84. echo %q%
  85. set /a a=%dx2%,b=1048576
  86. set /a result=%a%/%b%
  87. echo %a%/%b%=%h%
  88. set /a a=%dx3%,b=1048576
  89. set /a result=%a%/%b%
  90. echo %a%/%b%=%t%
  91. ::bytes转换成MB
  92. CHCP 936>nul
  93. Cls
  94. @ echo.
  95. echo 清理前%q%MB,清理后%h%MB,共清理了%t%MB,总共%sm3%个文件
  96. echo laiyuanys.ys168.com
  97. pause > nul
  98. :jia 加法计算函数
  99. setlocal enabledelayedexpansion&set f=&set "t="
  100. set var1=%~1&set var2=%~2&set /a j=0,n1=0,n2=0
  101. for /l %%a in (0 1 9) do (set vard1=&set "vard2="
  102. set var1=!var1:%%a= %%a !&set var2=!var2:%%a= %%a !)
  103. for %%a in (!var1!)do (set/a n1+=1&set vard1=%%a !vard1!)
  104. for %%a in (!var2!)do (set/a n2+=1&set vard2=%%a !vard2!)
  105. (if !n1! lss !n2! (set var1=%var2%&set "var2=%var1%"
  106. set vard1=%vard2%&set vard2=%vard1%))&set "var2=!var2: =!"
  107. for %%a in (!vard1!) do (if "!var2!"=="" set /a var2=0
  108. set /a a=%%a+!var2:~-1!+j&set t=!a:~-1!!t!&set "a=0!a!"
  109. set "j=!a:~-2,1!"&set var2=!var2:~0,-1!)
  110. if !j! neq 0 set "t=!j!!t!"
  111. Endlocal&set %~3=%t%&goto :EOF
  112. :jian 减法计算函数
  113. setlocal enabledelayedexpansion&&set t=&set f=&set "lin="
  114. for /l %%a in (1 1 10) do set "lin=0000000000!lin!"
  115. set lin=!lin!!lin!!lin!!lin!!lin!&set "lin=!lin!!lin!"
  116. set var1=!lin!%~1&set var2=!lin!%~2&set vard1=&set/a j=0
  117. set var1=!var1:~-1000!&set "var2=!var2:~-1000!"
  118. if "!var1!" lss "!var2!" (set var1=%~2&set "var2=%~1"
  119. set "f=-") else set var1=%~1&set "var2=%~2"
  120. for /l %%a in (0 1 9) do set "var1=!var1:%%a= %%a !"
  121. for %%a in (!var1!) do set "vard1=%%a !vard1!"
  122. for %%a in (!vard1!) do (if "!var2!"=="" set/a var2=0
  123. set /a a=%%a-j,b=!var2:~-1!
  124. if !a! lss !b! (set /a a+=10,j=1)else set /a j=0
  125. set /a w=a-b&set t=!w!!t!&set var2=!var2:~0,-1!)
  126. for /f "tokens=* delims=0" %%a in ("!t!") do (
  127. if "%%a"=="" (set t=0) else set "t=%%a")
  128. Endlocal&set %~3=%f%%t%&goto :EOF
复制代码
修改成
  1. for /f %%i in ('powershell -c "%dx1% /1024 /1024"') do (
  2. set "q=%%i"
  3. echo %q%
复制代码
就不执行下面的运算函数而是直接退出
我尝试添加
  1. pause > nul
复制代码
来看看运行过程也都是直接退出。。。。

TOP

回复 6# 赖渊
  1. for /f %%i in ('powershell -c "%dx1% /1024 /1024"') do (
  2.     set "q=%%i"
  3. )
  4. echo %q%
复制代码
1

评分人数

我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 7# Batcher
非常非常非常感谢!!
谢谢两位大佬,辛苦了
(o゚▽゚)o

TOP

返回列表