魔兽电影部落人物:请问在批处理文件中如何使用变量

来源:百度文库 编辑:查人人中国名人网 时间:2024/05/02 20:05:29
在批处理文件中怎么使用像int,float,double等类型的变量,有这些变量吗?
现在我想做一个ping ip的批处理程序
set c=0 //c要可以改变从1-255
set c=c+1//在sql命令里面可以用,这里不行,在网上有count c,但是提示count不是内部或外部命令
:loop
ping 221.14.249.%c%
goto loop
请指教

我来回答你
这是可以做到的
DOS可以说是弱类型的
没有像C语言那样分得很细
你想一次ping遍局域网
可以这样做
for /L %i in (1,1,255) do @ping -a 192.168.0.%i
这样就遍历了从192.168.0.1到192.168.0.255这256个地址
注意这是在CMD下的输入
如果想实现批处理要将其中的"%"用"%%"替代
for的L参数说明变量是整数类型
这样循环才有意义

还有你说手动将变量加一操作
可以使用set命令
但要注意参数的使用
比如一条命令
set aa=10
这句话单拿出来很难说这个aa是个什么类型
因为10可以是个数字
但是
set aa=shily
则不然
shily只能是字符串

至于加法等算术操作可以通过A参数来说明
比如在set aa=10的前提下执行
set /A aa=%aa%+1
那么aa的值就成了11
但是如果这样简单的写
set aa=%aa%+1
那么aa的值是什么呢?
事实上系统只做简单的拼接
aa的值边成了10+1
这是个字符串
于是上文的循环可以使用goto 来做了
set ip=0
:loop
if %ip%==255 goto end
set /A ip=%ip%+1
ping 192.168.0.%ip%
goto loop
:end
这样就实现了便历的功能
但是for语句不是更方便吗?

一些小问题:
定义过变量后使用%xxx%的格式来访问变量
如果变量不存在
并不会出现严重的错误
比如set aa=%abcd%
而abcd变量并不存在
那么aa的值就是%abcd%

在学习的时候检测变量的值可以使用
echo %aa%的格式

还有个人性化的地方
set aa=aaaaaaa
aet /A bb=%aa%+1
echo %bb%
那么bb的值是1
这是错误的
aa本不是整数变量怎么能加一呢
所以系统将它当成0来处理

set aa=15+15
echo %aa%
set bb=%aa%+1
echo %bb%
将先输出"15+15"然后输出"31"
这是人性化的地方
系统将15+15当成了30来评估

好了就先写这些
官方帮助参考
for /?
set /?

批处理里没有这些变量
只有%0 %1 %2 …… %9 这样的变量
比如批处理文件test.bat内容如下
type %1

则输入 test.bat 1.txt
会执行type 1.txt这个命令