Board logo

标题: 关于set /a 的问题,向各位高手请教一下。 [打印本页]

作者: AppleWolf     时间: 2008-8-25 20:36    标题: 关于set /a 的问题,向各位高手请教一下。


wmic logicaldisk where caption="%usbdisk%" get size,freespace,caption | findstr /v /i "caption">%tmp%\disksize.tmp
for /f "tokens=2" %%a in (%tmp%\disksize.tmp) do set diskfreesize=%%a%~nx1
上面这句我的本意是取得当前U盘容量,但是很明显
set diskfreesize=%%a%~nx1
是取得了当前U盘容量的字符串,而不是数字,我的U盘是40G的,我试用
set /a diskfreesize=%%a%~nx1
得到的结果是变量超32位了。

想请教各位,有没有办法获得这个变量,如果是160G的盘呢?!

可以精确到M或者10M

因为我需要运算要复制的数据量是否大于当前盘可用容量。

谢谢各位了。

[ Last edited by AppleWolf on 2008-8-25 at 08:39 PM ]
作者: HAT     时间: 2008-8-25 21:23
大数据还是调用vbs来计算吧
作者: AppleWolf     时间: 2008-8-26 00:27


  Quote:
Originally posted by HAT at 2008-8-25 09:23 PM:
大数据还是调用vbs来计算吧

还望楼上这位大哥赐教

如何用VBS做呢?
作者: HAT     时间: 2008-8-26 00:31
下面是以前搞的计算U盘总容量的二分之一的代码,是调用VBS计算的,你看看能否参照这个写出你自己的代码,如果不行,再提问。
@echo off
for /f "tokens=2 delims==" %%a in ('wmic LogicalDisk where "DriveType='2'" get * /value ^| findstr /i "^size"') do set total=%%a
echo U盘总容量: %total%
>"%tmp%\cacl.vbs" echo wscript.echo %total%/2
for /f %%a in ('cscript /nologo "%tmp%\cacl.vbs"') do echo U盘总容量的一半: %%a

作者: AppleWolf     时间: 2008-8-28 17:35
[quote]Originally posted by HAT at 2008-8-26 12:31 AM:
下面是以前搞的计算U盘总容量的二分之一的代码,是调用VBS计算的,你看看能否参照这个写出你自己的代码,如果不行,再提问。
@echo off
for /f ... [/quote]
谢谢楼上这位大哥,这两天工作忙,今天才得以偷闲看到大哥的回复。
是这样的,我将大哥的代码改成下面这样进行测试时,遇到一个问题

[code]@echo on
for /f "tokens=2 delims==" %%a in ('wmic LogicalDisk where "DriveType='2'" get * /value ^| findstr /i "^size"') do set total=%%a
echo U盘总容量: %total%
>"%tmp%\cacl.vbs" echo wscript.echo %total%/1048576
for /f %%a in ('cscript /nologo "%tmp%\cacl.vbs"') do set /a size=%%a
echo U盘总容量: %size%MB
del %tmp%\cacl.vbs

C:\>set /a size=1927.71875
运算符不存在。
因为我不懂VBS,所以想请教一下大哥,如何对total值进行取整呢?!
另外,
>"%tmp%\cacl.vbs" echo wscript.echo %total%/1048576
这句话中的前置定向符是怎么回事呢?!呵呵
麻烦你了!
作者: huahua0919     时间: 2008-8-28 18:58

@echo off
for /f "tokens=2 delims==" %%a in ('wmic LogicalDisk where "DriveType='2'" get * /value ^| findstr /i "^size"') do set

total=%%a
>"%tmp%\cacl.vbs" echo wscript.echo left(%total%/(1024^^3),3)
for /f %%a in ('cscript /nologo "%tmp%\cacl.vbs"') do echo U盘总容量: %%aG
pause
给你弄到G了
作者: AppleWolf     时间: 2008-8-29 11:43
谢谢楼上这位大哥指点,原来我学过一点QuickBASIC编程,根据你给出的上述例子,我自己改成如下后,就成功了,多谢大哥指点。
@echo on
for /f "tokens=2 delims==" %%a in ('wmic LogicalDisk where "DriveType='2'" get * /value ^| findstr /i "^size"') do set total=%%a
echo U盘总容量: %total%
>"%tmp%\cacl.vbs" echo wscript.echo int(%total%/1048576)
for /f %%a in ('cscript /nologo "%tmp%\cacl.vbs"') do set /a size=%%a
echo U盘总容量: %size%MB
del %tmp%\cacl.vbs
我就是把函数替换成了取整函数,呵呵,因为只是计算容量,并不要求四舍五入,所以我没用FIX,而是用了INT。

再次感谢大家对我的指点,谢谢!

[ Last edited by AppleWolf on 2008-8-29 at 11:44 AM ]