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

[数值计算] 批处理把单位为KB的超大数转换为GB单位

[复制链接]
发表于 2007-12-6 18:36:32 | 显示全部楼层 |阅读模式
如 e 盘大小为 12346058067203134065432153  kb
要求换算出 有多少 G  ?

给个思路.
发表于 2007-12-6 19:38:08 | 显示全部楼层
借用小学数学计算时的 “借位思想”。
测试代码:
  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:46 | 显示全部楼层
结果基本正确,但还是不知道这是什么原理.
数学等于零
简化了一点,不知道还能不能更简洁?
:
  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 编辑 ]
发表于 2007-12-6 22:36:02 | 显示全部楼层
set /a "var=%%i/1024/1024,yu=%%i%%1024"

这里 加引号有什么用途?
 楼主| 发表于 2007-12-6 22:54:12 | 显示全部楼层
加不加一样的,
发表于 2007-12-9 15:44:18 | 显示全部楼层
我也来一个,相比楼上两位大大,我的代码好"复杂",都有点不好意思贴出来了
  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
复制代码

评分

参与人数 1PB +2 收起 理由
youxi01 + 2

查看全部评分

发表于 2007-12-9 16:19:41 | 显示全部楼层
单看你的代码结构,就不得不让我给你加分啊?
不过,弱弱的问一句,你这个似乎用专门的代码编辑工具写的吧?
发表于 2007-12-9 16:28:27 | 显示全部楼层
嗯,谢谢加分!

是一个叫什么notepad+的工具写的吧,现在不记的,上次中招了,重搞系统就没见那工具
 楼主| 发表于 2007-12-9 18:50:25 | 显示全部楼层
ls两位,什么叫用编辑工具写的?youxi你是怎么看出来的?
楼上说的这个工具,论坛里有啊,第三方软件里面。
发表于 2007-12-9 22:38:26 | 显示全部楼层
我也不清楚youxi01是怎么看出来的

我也想知道他是怎么看出来的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-21 04:18 , Processed in 0.032850 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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