标题: [数值计算] [已解决]批处理怎样把文件大小如1K、2M转换成字节? [打印本页]
作者: ttenma 时间: 2011-2-14 00:45 标题: [已解决]批处理怎样把文件大小如1K、2M转换成字节?
程序需要输入字节,每次都要在计算器里算一次。希望有个方便点的方法。
例如输入 1K 自动转成 1024
输入 2M 自动转成 2097152
我能想到的方法是,如果全是数字,不改变。
最后一个字母是K,数字部分就乘以1024。
最后一个字母是M,数字部分乘1048576
最后一个字母是G,数字部分乘1073741824
不算T,输入数字为整数,有没有简单的方法?
SET /P size=
......
echo %size%
[ 本帖最后由 ttenma 于 2011-2-14 20:55 编辑 ]
作者: ubcc 时间: 2011-2-14 00:59
我不会写,不好意思啊
作者: broly 时间: 2011-2-14 01:04
批处理如果计算大数字,容易超过范围。
下面这个是VBS,支持TB计算:- On Error Resume Next
- Dim strInput,strOutput,sngNum,strRes,strLast
- Do
- strInput=InputBox("请输入:")
- strLast=Right(Trim(strInput),1)
- sngNum=Left(Trim(strInput),Len(strInput)-1)
- Select Case LCase(strLast)
- Case "k"
- strOutput=sngNum*1024
- Case "m"
- strOutput=sngNum*1024*1024
- Case "g"
- strOutput=sngNum*1024*1024*1024
- Case "t"
- strOutput=sngNum*1024*1024*1024*1024
- End Select
- strRes=MsgBox("结果为: "&strOutput&" 字节"&vbCrLf &_
- vbCrLf & "继续?",vbYesNo+vbInformation,"提示")
- Loop Until strRes=vbNo
复制代码
[ 本帖最后由 broly 于 2011-2-14 01:08 编辑 ]
作者: CrLf 时间: 2011-2-14 01:15
变量替换就行了,只是只支持20MB以下:- @echo off
- set size=1024M
- set K=%size:M=*1024K%
- set /a B=%K:K=*1024%
- echo %B%
- pause
复制代码
笔误已修正
[ 本帖最后由 zm900612 于 2011-2-14 01:53 编辑 ]
作者: CrLf 时间: 2011-2-14 01:28
或者这样,计算范围会大很多,最大支持909T的简单计算(不支持5T100G2M1K这种输入):- @echo off
- set size=909T
- set G=%size:T=*1024G%
- set M=%G:G=*1024M%
- set K=%M:M=*1024K%
- set B=%K:K=*1024%
- mshta vbscript:msgbox("%size%="^&eval("%B%")^&"字节")(window.close)
- pause
复制代码
作者: CrLf 时间: 2011-2-14 01:47
非要输出在cmd里以便复制也可以(话说复制到剪贴板不是更方便):- @echo off
- set size=909T
- set G=%size:T=*1024G%
- set M=%G:G=*1024M%
- set K=%M:M=*1024K%
- set B=%K:K=*1024%
- %1 mshta vbscript:createobject("wscript.shell").run("%~s0 ::"^&"%size%="^&eval("%B%")^&"字节")(window.close)&&exit
- echo;%2
- pause
复制代码
作者: ttenma 时间: 2011-2-14 01:49
主要還是批量處理,程序能直接使用。例如 xxxx.exe -b %size%
上限为50G=53687091200
作者: wc726842270 时间: 2011-2-14 01:51 标题: 回复 4楼 的帖子
思路不错,不过有个小失误。- set K=%size:M=*1024K%
- set /a B=%size:K=*1024%
复制代码
作者: CrLf 时间: 2011-2-14 01:52
那也好办...- @echo off
- set size=909T
- set G=%size:T=*1024G%
- set M=%G:G=*1024M%
- set K=%M:M=*1024K%
- set B=%K:K=*1024%
- mshta vbscript:createobject("wscript.shell").run("xxxx.exe -b "^&"%size%="^&eval("%B%")^&"字节")(window.close)
复制代码
作者: wc726842270 时间: 2011-2-14 01:54 标题: 回复 7楼 的帖子
个人感觉。VBS更加实用
作者: CrLf 时间: 2011-2-14 02:05
同感,计算的事情实在不是bat长项
作者: broly 时间: 2011-2-14 12:08
要批量?
-
- '//保存我为1.vbs
- On Error Resume Next
- Dim objArgs,strInput,strOutput,sngNum,strRes,strLast
- Set objArgs=WScript.Arguments
- If objArgs.Count=0 Then WScript.Quit
- strInput=objArgs.Item(0)
- strLast=Right(Trim(strInput),1)
- sngNum=Left(Trim(strInput),Len(strInput)-1)
- Select Case LCase(strLast)
- Case "k"
- strOutput=sngNum*1024
- Case "m"
- strOutput=sngNum*1024*1024
- Case "g"
- strOutput=sngNum*1024*1024*1024
- Case "t"
- strOutput=sngNum*1024*1024*1024*1024
- End Select
- WScript.Echo strInput&" = "&strOutput&" 字节"
复制代码
用法:- cscript /nologo 1.vbs 一个参数如1M
复制代码
批量事例:- @echo off
- for /f "delims=" %%i in ('more +7 "%~f0"') do (
- cscript /nologo 1.vbs %%i
- )
- pause&exit
-
- 1m
- 4k
- 76g
- 456k
- 8567m
- 45g
复制代码
作者: hanyeguxing 时间: 2011-2-14 12:20
- @echo off
- call:s 1234t
- echo %size%
- pause&exit
- :s
- setlocal enableDelayedExpansion
- set p=%1&set q=%1&set p1=!p:~0,-1!&set p2=!p:~-1!
- if /i %p2%==k set/a q=p1*1024
- if /i %p2%==m set/a q=p1*1048576
- if /i %p2%==g set n=1073741824&call:e
- if /i %p2%==t set n=1099511627776&call:e
- endlocal&set size=%q%&goto:eof
- :e
- set q=&set/a q1=p1*%n:~0,-6%,q2=p1*%n:~-6%
- set q1=0000000000%q1%000000&set q1=!q1:~-16!
- set q2=0000000000%q2%&set q2=!q2:~-16!
- for /l %%a in (-1,-1,-16) do (
- set/a n=!q1:~%%a,1!+!q2:~%%a,1!+m,m=0&set q=!n:~-1!!q!
- if !n! geq 10 set m=1
- )
- for /l %%a in (1,1,10) do if !q:~0^,1!==0 (set q=!q:~1!) else goto:eof
复制代码
[ 本帖最后由 hanyeguxing 于 2011-2-14 12:36 编辑 ]
作者: ttenma 时间: 2011-2-14 20:54
13楼的能正常使用。
但有个小问题,上限是50G,输入51200M,52428800K时会出错。
影响不大,算是解决了。
作者: hanyeguxing 时间: 2011-2-14 21:05 标题: 回复 14楼 的帖子
51200M应该写成51G,否则51G存在还有什么意义了呢?
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |