中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 关于set /a 的问题,向各位高手请教一下。
作者:
标题: 关于set /a 的问题,向各位高手请教一下。 上一主题 | 下一主题
AppleWolf
初级用户





积分 110
发帖 41
注册 2007-3-31
状态 离线
『楼 主』:  关于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 ]

2008-8-25 20:36
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 2 楼』:  

大数据还是调用vbs来计算吧



2008-8-25 21:23
查看资料  发短消息 网志   编辑帖子  回复  引用回复
AppleWolf
初级用户





积分 110
发帖 41
注册 2007-3-31
状态 离线
『第 3 楼』:  



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

还望楼上这位大哥赐教

如何用VBS做呢?

2008-8-26 00:27
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 4 楼』:  

下面是以前搞的计算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




2008-8-26 00:31
查看资料  发短消息 网志   编辑帖子  回复  引用回复
AppleWolf
初级用户





积分 110
发帖 41
注册 2007-3-31
状态 离线
『第 5 楼』:  

[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
这句话中的前置定向符是怎么回事呢?!呵呵
麻烦你了!

2008-8-28 17:35
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
huahua0919
银牌会员




积分 1608
发帖 780
注册 2007-10-7
状态 离线
『第 6 楼』:  


@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了

2008-8-28 18:58
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
AppleWolf
初级用户





积分 110
发帖 41
注册 2007-3-31
状态 离线
『第 7 楼』:  

谢谢楼上这位大哥指点,原来我学过一点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 ]

2008-8-29 11:43
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: