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

[数值计算] 计算机单位换算脚本.BAT

[复制链接]
发表于 昨天 07:36 | 显示全部楼层 |阅读模式

--------------------------------计算机单位换算脚本.BAT-----------扔代码-------
  1. @Echo off
  2. Rem;;;;;;下句 +1 是为了防止 %b% = 0
  3. Set/a b=%Random% %% 9 + 1
  4. :Run
  5. Set/a a+=1
  6. Set s=%s%%Random%
  7. If Not %a% equ %b% Goto,Run
  8. Rem;;;;;; 下句 %s% 是转换值,可以用其他变量或数值取代,上面几句是编写临时测试脚本用的,可以扔了。。
  9. Echo.i="%s%" >$
  10. Echo.If i^<1024 Then  >>$
  11. Echo.l=i^&" Byte" >>$
  12. Echo.ElseIf i^<1048576 Then l=Round(i/1024,2)^&" KB" >>$
  13. Echo.ElseIf i^<1073741824 Then l=Round(i/1048576,2)^&" MB" >>$
  14. Echo.Elseif i^<1099511627776 Then l=Round(i/1073741824,2)^&" GB" >>$
  15. Echo.Elseif i^<1125899906842624 Then l=Round(i/1099511627776,2)^&" TB" >>$
  16. Echo.Elseif i^<1152921504606846976 Then l=Round(i/1125899906842624,2)^&" PB" >>$
  17. Echo.Elseif i^<1180591620717411303424 Then l=Round(i/1152921504606846976,2)^&" EB" >>$
  18. Echo.Elseif i^<1208925819614629174706176 Then l=Round(i/1180591620717411303424,2)^&" ZB" >>$
  19. Echo.Elseif i^<1237940039285380274899124224 Then l=Round(i/1208925819614629174706176,2)^&" YB" >>$
  20. Echo.Elseif i^<1267650600228229401496703205376 Then l=Round(i/1237940039285380274899124224,2)^&" BB" >>$
  21. Echo.Elseif i^<1298074214633706907132624082305024 Then l=Round(i/1267650600228229401496703205376,2)^&" NB" >>$
  22. Echo.Elseif i^<1329227995784915872903807060280344576 Then l=Round(i/1298074214633706907132624082305024,2)^&" DB" >>$
  23. Echo.Elseif i^<1361129467683753853853498429727072845824 Then l=Round(i/1329227995784915872903807060280344576,2)^&" CB" >>$
  24. Echo.Else l=Round(i/1361129467683753853853498429727072845824,2)^&" XB" >>$
  25. Echo.End If >>$
  26. Echo.Wscript.Echo l >>$
  27. Rem;;;;;;如果单纯的求换算可以把以下生成的代码删了,保留自删那行就可以了
  28. Echo.BE=i^&" Byte" >>$
  29. Echo.KB=Round(i/1024,2)^&" KB" >>$
  30. Echo.MB=Round(i/1048576,2)^&" MB" >>$
  31. Echo.GB=Round(i/1073741824,2)^&" GB" >>$
  32. Echo.TB=Round(i/1099511627776,2)^&" TB" >>$
  33. Echo.PB=Round(i/1125899906842624,2)^&" PB" >>$
  34. Echo.EB=Round(i/1152921504606846976,2)^&" EB" >>$
  35. Echo.ZB=Round(i/1180591620717411303424,2)^&" ZB" >>$
  36. Echo.YB=Round(i/1208925819614629174706176,2)^&" YB" >>$
  37. Echo.BB=Round(i/1237940039285380274899124224,2)^&" BB" >>$
  38. Echo.NB=Round(i/1267650600228229401496703205376,2)^&" NB" >>$
  39. Echo.DB=Round(i/1298074214633706907132624082305024,2)^&" DB" >>$
  40. Echo.CB=Round(i/1329227995784915872903807060280344576,2)^&" CB" >>$
  41. Echo.XB=Round(i/1361129467683753853853498429727072845824,2)^&" XB" >>$
  42. Echo.Wscript.Echo "=====================" ^& chr(10) ^& l ^& chr(10) ^& "---------------------" ^& chr(10) ^& BE ^& chr(10) ^& KB ^& chr(10) ^& MB ^& chr(10) ^& GB ^& chr(10) ^& TB ^& chr(10) ^& PB ^& chr(10) ^& EB ^& chr(10) ^& ZB ^& chr(10) ^& YB ^& chr(10) ^& BB ^& chr(10) ^& NB ^& chr(10) ^& DB ^& chr(10) ^& CB ^& chr(10) ^& XB ^&  chr(10) ^& "=====================" >>$
  43. Rem;;;;;;下句是VBS 自删语句,不建议删除
  44. Echo.CreateObject("Scripting.Filesystemobject").DeleteFile(Wscript.ScriptFullName)>>$
  45. Rem;;;;;;下句是脚本该脚本调用显示,完整获取 可以用 FOR Cscript -e:vbs -nologo $ 获取转换值和单位,,
  46. Start/Max "随机生成计算机单位" Cmd /t:e0 /k Echo.随机数【%s%】,循环 %b% 次!^& Cscript -e:vbs -nologo $ ^& Pause^>Nul ^& Exit & Exit
复制代码

------------------------------存ANSI 编码---------名 XXXXXX.BAT  -------

朋友写脚本问我,怎么把获取到的文件大小 Size 准确的换成合适的单位来表达,保留小数点后两位
原本我是叫他去找A1的,不过那家伙功底好像有点低,而且比我还懒,,
帮他找里几个A1答复,感觉不是很满意,,
那叼毛,想找的就是全单位转换,Byte,KB、MB、GB、TB、PB、EB、ZB、YB、BB、NB、DB、CB,XB
BAT 下不可转换,可以借助 VBS 来转换,,于是编写了该脚本,,,
编写的时候,计算的位数高达 40 位,1361129467683753853853498429727072845824

普通市面上的计算器 根本无法精确计算,,

找了很多计算器,要么不支持,要么挂羊头卖狗肉,,要么要登录下载,要么过期,
找了几款在线 大整数计算器 ,广告还特别的多,,

于是于昨天,一气之下 , 抽取了其中一款在线计算器的部分核心计算源码,,
借助 A1 改写了一款  “大整数计算器 — 超大整数运算与进制转换”,的计算器,
https://www.bathome.net/thread-95286-1-1.html
支持 10万位整数计算表达,,,算是意外所得,,
,人啊,不能吃太饱,闲得慌!,,,
发表于 昨天 21:33 | 显示全部楼层
让AI参考 https://bbs.bathome.net/forum.ph ... 1593&pid=153139

逐位长除法

bytes_convert.bat

  1. @echo off
  2. setlocal EnableExtensions EnableDelayedExpansion

  3. :input
  4. set "bytes="
  5. set /p "bytes=Bytes: "
  6. if not defined bytes exit /b

  7. rem 检查输入是否全部为数字
  8. set "bad=!bytes!"
  9. for %%D in (0 1 2 3 4 5 6 7 8 9) do if defined bad set "bad=!bad:%%D=!"
  10. if defined bad (
  11.     echo Please enter a nonnegative integer using digits only.
  12.     goto input
  13. )
  14. if not "!bytes:~1000,1!"=="" (
  15.     echo Please enter at most 1000 digits.
  16.     goto input
  17. )

  18. rem 去除多余的前导零
  19. :trim_input
  20. if "!bytes:~0,1!"=="0" if not "!bytes:~1!"=="" (
  21.     set "bytes=!bytes:~1!"
  22.     goto trim_input
  23. )

  24. rem 末尾补三个零,相当于乘以1000,内部保留三位小数
  25. set "scaled=!bytes!000"
  26. set "best=!bytes! Byte"
  27. echo(
  28. echo !bytes! Byte

  29. for %%U in (KB MB GB TB PB EB ZB YB BB NB DB CB XB) do (
  30.     call :divide1024
  31.     call :format2
  32.     echo !shown! %%U
  33.     rem scaled至少有四位,说明换算结果不小于1
  34.     if not "!scaled:~3,1!"=="" set "best=!shown! %%U"
  35. )

  36. echo(
  37. echo Auto: !best!
  38. echo(
  39. pause
  40. exit /b

  41. rem 大整数除以1024,商仍然保存为字符串
  42. :divide1024
  43. setlocal EnableDelayedExpansion
  44. set "src=!scaled!"
  45. set "quotient="
  46. set /a rem=0

  47. :divide_next
  48. set /a "work=rem*10+!src:~0,1!,digit=work/1024,rem=work%%1024"
  49. if defined quotient (
  50.     set "quotient=!quotient!!digit!"
  51. ) else if !digit! neq 0 (
  52.     set "quotient=!digit!"
  53. )
  54. set "src=!src:~1!"
  55. if defined src goto divide_next

  56. if not defined quotient set "quotient=0"
  57. endlocal & set "scaled=%quotient%"
  58. exit /b

  59. rem 四舍五入到两位小数,不修改内部的scaled
  60. :format2
  61. setlocal EnableDelayedExpansion
  62. set "digits=000!scaled!"
  63. set "round=!digits:~-1!"
  64. set "digits=!digits:~0,-1!"
  65. if !round! lss 5 goto format_trim

  66. rem 对任意长度的数字字符串加1,处理连续进位
  67. set "tail="

  68. :format_carry
  69. set "digit=!digits:~-1!"
  70. set "digits=!digits:~0,-1!"
  71. if "!digit!"=="9" (
  72.     set "tail=0!tail!"
  73.     goto format_carry
  74. )
  75. set /a digit+=1
  76. set "digits=!digits!!digit!!tail!"

  77. :format_trim
  78. if "!digits:~0,1!"=="0" if not "!digits:~3!"=="" (
  79.     set "digits=!digits:~1!"
  80.     goto format_trim
  81. )
  82. set "shown=!digits:~0,-2!.!digits:~-2!"
  83. endlocal & set "shown=%shown%"
  84. exit /b
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-10-3 06:10

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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