找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 27869|回复: 7

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

[复制链接]
发表于 2021-5-9 13:57:47 | 显示全部楼层 |阅读模式
本帖最后由 赖渊 于 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左右)
路径还没有写入,这个无视就好。。。。

麻烦各位了。。。
发表于 2021-5-9 15:32:46 | 显示全部楼层
发表于 2021-5-9 19:56:45 | 显示全部楼层
用powershell 计算

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

评分

参与人数 1技术 +1 收起 理由
赖渊 + 1 感谢

查看全部评分

 楼主| 发表于 2021-5-10 06:28:00 | 显示全部楼层
回复 3# newswan

谢谢Thanks♪(・ω・)ノ,似乎能计算起来了,但是输出结果不知道怎么调用起来。。。。
发表于 2021-5-10 07:57:50 | 显示全部楼层
回复 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技术 +1 收起 理由
赖渊 + 1 谢谢

查看全部评分

 楼主| 发表于 2021-5-10 11:13:02 | 显示全部楼层
回复 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
复制代码
来看看运行过程也都是直接退出。。。。
发表于 2021-5-10 11:50:04 | 显示全部楼层
回复 6# 赖渊
  1. for /f %%i in ('powershell -c "%dx1% /1024 /1024"') do (
  2.     set "q=%%i"
  3. )
  4. echo %q%
复制代码

评分

参与人数 1技术 +1 收起 理由
赖渊 + 1 辛苦乐

查看全部评分

 楼主| 发表于 2021-5-11 06:40:17 | 显示全部楼层
回复 7# Batcher
非常非常非常感谢!!
谢谢两位大佬,辛苦了
(o゚▽゚)o
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-20 14:46 , Processed in 0.021802 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表