中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-07-03 04:07
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 关于set /a 的问题,向各位高手请教一下。 查看 817 回复 6
楼 主 关于set /a 的问题,向各位高手请教一下。 发表于 2008-08-25 20:36 ·  中国 浙江 宁波 北仑区 电信
初级用户
积分 110
发帖 41
注册 2007-03-31 17:20
19年会员
UID 83521
性别 男
状态 离线
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 ]
2 发表于 2008-08-25 21:23 ·  中国 重庆 九龙坡区 电信
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
大数据还是调用vbs来计算吧
3 发表于 2008-08-26 00:27 ·  中国 浙江 电信
初级用户
积分 110
发帖 41
注册 2007-03-31 17:20
19年会员
UID 83521
性别 男
状态 离线
Originally posted by HAT at 2008-8-25 09:23 PM:
大数据还是调用vbs来计算吧

还望楼上这位大哥赐教

如何用VBS做呢?
4 发表于 2008-08-26 00:31 ·  中国 重庆 九龙坡区 电信
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
下面是以前搞的计算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
5 发表于 2008-08-28 17:35 ·  中国 浙江 宁波 北仑区 电信
初级用户
积分 110
发帖 41
注册 2007-03-31 17:20
19年会员
UID 83521
性别 男
状态 离线
Originally posted by HAT at 2008-8-26 12:31 AM:
下面是以前搞的计算U盘总容量的二分之一的代码,是调用VBS计算的,你看看能否参照这个写出你自己的代码,如果不行,再提问。
@echo off
for /f ...

谢谢楼上这位大哥,这两天工作忙,今天才得以偷闲看到大哥的回复。
是这样的,我将大哥的代码改成下面这样进行测试时,遇到一个问题

@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

这句话中的前置定向符是怎么回事呢?!呵呵
麻烦你了!
6 发表于 2008-08-28 18:58 ·  中国 江苏 苏州 中移铁通
银牌会员
★★★
积分 1,608
发帖 780
注册 2007-10-07 10:19
18年会员
UID 99089
性别 男
状态 离线

@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了
7 发表于 2008-08-29 11:43 ·  中国 浙江 宁波 北仑区 电信
初级用户
积分 110
发帖 41
注册 2007-03-31 17:20
19年会员
UID 83521
性别 男
状态 离线
谢谢楼上这位大哥指点,原来我学过一点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 ]
论坛跳转: