标题: [数值计算] 批处理把单位为KB的超大数转换为GB单位 [打印本页]
作者: 随风 时间: 2007-12-6 18:36 标题: 批处理把单位为KB的超大数转换为GB单位
如 e 盘大小为 12346058067203134065432153 kb
要求换算出 有多少 G ?
给个思路.
作者: youxi01 时间: 2007-12-6 19:38
借用小学数学计算时的 “借位思想”。
测试代码:- @echo off&setlocal EnableDelayedExpansion
- set size=12346058067203134065432153
- set num1=%size:~0,4%
- set num2=%size:~4%
- call :division %num1%
- for /l %%i in (0 1 100) do (
- set num=!num2:~%%i,1!
- if "!num!"=="" goto :result
- call :division !var!!num!
- )
-
- :result
- for /f "delims=0 tokens=*" %%i in ("!str!") do echo %%i
-
- pause>nul
- :division
- set /a var=%1 %% 1024
- set /a res_=%1/1024
- set str=!str!!res_!
复制代码
不知道结果对不对罗
作者: 随风 时间: 2007-12-6 21:58
结果基本正确,但还是不知道这是什么原理.
数学等于零
简化了一点,不知道还能不能更简洁?
:- @echo off&setlocal EnableDelayedExpansion
- set size=19337576448&set "var=!size:~0,4!"
- for /l %%i in (5 1 100) do (
- set var=!var!!size:~%%i,1!
- set /a "res_=var/1024,var=var%%1024"
- set "str=!str!!res_!"
- if "!size:~%%i,1!"=="" goto :result
- )
- :result
- for /f "delims=0 tokens=*" %%i in ("!str!") do (
- set /a "var=%%i/1024/1024,yu=%%i%%1024"
- )
- echo !var!.!yu! G
- 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
我也来一个,相比楼上两位大大,我的代码好"复杂",都有点不好意思贴出来了- @echo off
- set split=5
- set zero=0000000000
- 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 (
- if exist %%a:\ (
- for /f "tokens=3 delims= " %%i in ('dir /-c %%a:\') do set size=%%i
- setlocal enabledelayedexpansion
- call :pd size-a size-b
- call :xyz ie1 ie2
- echo.
- call echo 你的%%a盘所剩空间为: %%ie1%%.%%ie2:~0,1%%G
- echo.
- ))
- pause&goto :eof
-
- :pd
- if "!size:~-%split%,1!"=="0" (
- set /a split-=1
- goto pd
- ) else (
- call set %1=%%size:~0,-%split%%%
- call set %2=%%size:~-%split%%%
- goto :eof
- )
-
- :xyz
- set /a a=%size-a%/1024,b=%size-b%/1024
- set /a c=%size-a%%%1024,d=%size-b%%%1024
- call set /a e=%a%%%zero:~-%split%%%
- call set /a f=%c%%%zero:~-%split%%%
- set /a %1=(%e%+%b%+(%f%+%d%)/1024)/(1024*1024)
- set /a %2=(%e%+%b%+(%f%+%d%)/1024)%%(1024*1024)
- 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 |