Board logo

标题: [数值计算] 批处理把单位为KB的超大数转换为GB单位 [打印本页]

作者: 随风    时间: 2007-12-6 18:36     标题: 批处理把单位为KB的超大数转换为GB单位

如 e 盘大小为 12346058067203134065432153  kb
要求换算出 有多少 G  ?

给个思路.
作者: youxi01    时间: 2007-12-6 19:38

借用小学数学计算时的 “借位思想”。
测试代码:
  1. @echo off&setlocal EnableDelayedExpansion
  2. set size=12346058067203134065432153
  3. set num1=%size:~0,4%
  4. set num2=%size:~4%
  5. call :division %num1%
  6. for /l %%i in (0 1 100) do (
  7.    set num=!num2:~%%i,1!
  8.    if "!num!"=="" goto :result
  9.    call :division !var!!num!
  10. )
  11. :result
  12. for /f "delims=0 tokens=*" %%i in ("!str!") do echo %%i
  13. pause>nul
  14. :division
  15. set /a var=%1 %% 1024
  16. set /a res_=%1/1024
  17. set str=!str!!res_!
复制代码
不知道结果对不对罗
作者: 随风    时间: 2007-12-6 21:58

结果基本正确,但还是不知道这是什么原理.
数学等于零
简化了一点,不知道还能不能更简洁?
:
  1. @echo off&setlocal EnableDelayedExpansion
  2. set size=19337576448&set "var=!size:~0,4!"
  3. for /l %%i in (5 1 100) do (
  4.    set var=!var!!size:~%%i,1!
  5.    set /a "res_=var/1024,var=var%%1024"
  6.    set "str=!str!!res_!"
  7.    if "!size:~%%i,1!"=="" goto :result
  8. )
  9. :result
  10. for /f "delims=0 tokens=*" %%i in ("!str!") do (
  11.   set /a "var=%%i/1024/1024,yu=%%i%%1024"
  12. )
  13. echo !var!.!yu! G
  14. pause>nul
复制代码

[ 本帖最后由 随风 于 2007-12-7 10:20 编辑 ]
作者: youxi01    时间: 2007-12-6 22:36

set /a "var=%%i/1024/1024,yu=%%i%%1024"

这里 加引号有什么用途?
作者: 随风    时间: 2007-12-6 22:54

加不加一样的,
作者: ieutk    时间: 2007-12-9 15:44

我也来一个,相比楼上两位大大,我的代码好"复杂",都有点不好意思贴出来了
  1. @echo off
  2. set split=5
  3. set zero=0000000000
  4. for %%a in (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 (
  5. if exist %%a:\ (
  6. for /f "tokens=3 delims= " %%i in ('dir /-c %%a:\') do set size=%%i
  7. setlocal enabledelayedexpansion
  8. call :pd size-a size-b
  9. call :xyz ie1 ie2
  10. echo.
  11. call echo  你的%%a盘所剩空间为: %%ie1%%.%%ie2:~0,1%%G
  12. echo.
  13.      ))
  14. pause&goto :eof
  15. :pd
  16. if "!size:~-%split%,1!"=="0" (
  17. set /a split-=1
  18. goto pd
  19.     ) else (
  20. call set %1=%%size:~0,-%split%%%
  21. call set %2=%%size:~-%split%%%
  22. goto :eof
  23.     )
  24. :xyz
  25. set /a a=%size-a%/1024,b=%size-b%/1024
  26. set /a c=%size-a%%%1024,d=%size-b%%%1024
  27. call set /a e=%a%%%zero:~-%split%%%
  28. call set /a f=%c%%%zero:~-%split%%%
  29. set /a %1=(%e%+%b%+(%f%+%d%)/1024)/(1024*1024)
  30. set /a %2=(%e%+%b%+(%f%+%d%)/1024)%%(1024*1024)
  31. goto :eof
复制代码

作者: youxi01    时间: 2007-12-9 16:19

单看你的代码结构,就不得不让我给你加分啊?
不过,弱弱的问一句,你这个似乎用专门的代码编辑工具写的吧?
作者: ieutk    时间: 2007-12-9 16:28

嗯,谢谢加分!

是一个叫什么notepad+的工具写的吧,现在不记的,上次中招了,重搞系统就没见那工具
作者: 随风    时间: 2007-12-9 18:50

ls两位,什么叫用编辑工具写的?youxi你是怎么看出来的?
楼上说的这个工具,论坛里有啊,第三方软件里面。
作者: ieutk    时间: 2007-12-9 22:38

我也不清楚youxi01是怎么看出来的

我也想知道他是怎么看出来的




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