Calendar
数据载入中,请稍候......
Placard
数据载入中,请稍候......
Category
数据载入中,请稍候......
Latest Entries
数据载入中,请稍候......
Latest Comments
数据载入中,请稍候......
Last Messages
数据载入中,请稍候......
User Login
数据载入中,请稍候......
Links
Information
数据载入中,请稍候......
Search
Other


Welcome to my blog!
  批处理命令与变量(ping的结合)
 

今天,看到同事想用批处理想来处理一批域名.为此找了点资料,传上去,以便以后参考

Ping高级用法:懒网管们的福音
ping命令结合dos批处理能做很多事,对我等懒惰的系统管理员们尤其有用。

一.基础级:局域网ping命令用法

1.改变ping的基本设置
ping命令缺省要重复4次,等待时间也比较长,这用于广域网比较合适,
在局域网判断一个ip是否存在,一般只要ping 1次足够,而且timeout时间
完全可以在100ms以内。

我在自己的PC上建立一个批处理pin.bat代替缺省的ping设置:

@rem pin.bat Createdby Bankin
@ping -n 1 -l 16 -w 100 %1 %2 %3 %4 %5

这命令比缺省的ping快很多,后面加%1等是为了接受命令行参数,这是为了
下面的扩展用法准备的。

2.单个网段内的懒人ping
如果你象我一样懒,可以把自己局域网的网络号也写死在批处理文件p.bat里:

@rem p.bat Createdby Bankin
call pin 192.168.1.%1 %2 %3 %4 %5

比如你的mail服务器是192.168.1.2,那么只要输 p 2 即可。
如果你有多个网段,可以在dos环境变量里设一下子网号。

3.游戏玩家的终极懒人ping

如果你的internet 网络连接需要经常检查,可以做一个批处理文件,再把它的
快捷方式放在桌面上,定义一个快捷键。这样你在做任何工作时,随时可以看
一下网络是否通,只要敲一个组合键,而不是要打开dos窗口,输好几条命令,
再关掉此窗口。(当你打网络游戏中突然网络断掉,这时候你需要最快速度确定
网关是否能ping到)

这里要用一个技巧,就是dos命令返回值 %ERRORLEVEL%,当dos命令执行成功时,一般来说环境变量%ERRORLEVEL%会赋值0,失败则为1,我们利用这个方法,让脚本自己逐级查找网络连接问题。

@rem pinggw.bat Createdby Bankin
@echo off

ping -n 1 192.168.1.1 |find "Reply"
rem 如果这一步成功说明到本地网关的连接没有问题。
if %ERRORLEVEL%==1 goto end

ping -n 1 202.96.199.133 |find "Reply"
rem 这是上海电信局的DNS,如果这一步成功说明到本地ISP的连接没有问题。
if %ERRORLEVEL%==1 goto end

ping -n 1 www.163.com |find "Reply"
rem 如果这一步成功说明本地ISP和internet连接没有问题,而且DNS没有问题。

:end
rem pause
sleep 2
exit

sleep 2 停下2秒钟让你看清楚,然后自己exit退出,不要麻烦你关窗口。
注意:sleep是windows2000 资源包的扩展命令,如果没有装就用pause代替吧。

二. 网络管理员常用ping命令技巧
1.入门级:网络连接监视日志
我在一个项目里碰到交换机连接不稳定的情况,每天会随机中断几分钟,
为了捕捉这个问题,做一个带时间显示的批处理文件pingtime.bat:

@rem pingtime.bat Createdby Bankin
@echo off
echo "Begin ----------------------------"
rem time <cr.txt |find "current"
time /t
pin %1 %2 %3 %4 %5 | find "Reply"
rem sleep 10

其中显示时间命令有两个版本,在windows2000上用time/t 命令即可,
在win98上,要在当前目录下创建只有一个空回车的cr.txt文件。

然后再做一个批处理文件来循环调用pingtime.bat并写入日志:

@rem pinglog.bat Createdby Bankin
@echo off
:begin
call pingtime 192.168.1.1>>pingtime.log
goto begin

2.中级:搜索当前网段内的所有活动ip

缺乏良好管理的网络(我们大多数人的实际环境),网管经常搞不清
有多少机器在运行,或者已经有多少个ip正在使用。
如何在5分钟内拿到一个列表?只要一条dos命令即可:

@rem pingall.bat Createdby Bankin
@for /L %%A in (1,1,254) do pin 192.168.1.%%A |find "Reply">> pingall.log

顺便说一句,windows2000的dos命令做了很多扩展,虽然比unix shell还差
很多,可是已经能做一些复杂的脚本,而且在网络方面还有netsh命令集,值得好好研究。

3.变态用法:搜索当前网段内所有的ip地址/mac对照表

首先我们做一个批处理,ping 1个ip地址,如果有reply,就调用arp -a命令,查看当前arp缓存里的ip-mac列表,并且再用dos筛选命令find找出当前目标ip地址。

@rem arplist.bat Createdby Bankin
@echo off
call pin %1 | find "Reply">nul
if %ERRORLEVEL%==0 goto arplist
goto end
:arplist
arp -a |find "%1"
:end

然后用类似上一节的方法做一个子网ip地址循环脚本来调用arplist.bat。

@rem arpall.bat Createdby Bankin
@for /L %%A in (1,1,254) do arplist 192.168.1.%%A >> arpall.log

注意:这个脚本不太完善,比如用192.168.1.1过滤arp表时,192.168.1.1**都会输出,而且不能处理本机ip,所以做好后要手工修改一下。

=============================

批处理命令与变量

1:for命令及变量 基本格式:
FOR /参数 %variable IN (set) DO command [command_parameters] %variable:指定一个单一字母可替换的参数,如:%i ,而指定一个变量则用:%%i ,而调用变量时用:%i% ,变量是区分大小写的(%i 不等于 %I)。
批处理每次能处理的变量从%0—%9共10个,其中%0默认给批处理文件名使用,%1默认为使用此批处理时输入的的第一个值,同理:%2—%9指输入的第2-9个值;例:net use \\ip\ipc$ pass /user:user 中ip为%1,pass为%2 ,user为%3

(set):指定一个或一组文件,可使用通配符,如:(D:\user.txt)和(1 1 254)(1 -1 254),{“(1 1 254)”第一个"1"指起始值,第二个"1"指增长量,第三个"254"指结束值,即:从1到254;“(1 -1 254)”说明:即从254到1}

command:指定对第个文件执行的命令,如:net use命令;如要执行多个命令时,命令这间加:& 来隔开
command_parameters:为特定命令指定参数或命令行开关

IN (set):指在(set)中取值;DO command :指执行command

参数:/L 指用增量形式{(set)为增量形式时};/F 指从文件中不断取值,直到取完为止{(set)为文件时,如(d:\pass.txt)时}。
用法举例:
@echo off
echo 用法格式:test.bat *.*.* > test.txt

for /L %%G in (1 1 254) do echo %1.%%G >>test.txt & net use \\%1.%%G /user:administrator | find "命令成功完成" >>test.txt
存为test.bat 说明:对指定的一个C类网段的254个IP依次试建立administrator密码为空的IPC$连接,如果成功就把该IP存在test.txt中。

/L指用增量形式(即从1-254或254-1);输入的IP前面三位:*.*.*为批处理默认的 %1;%%G 为变量(ip的最后一位);& 用来隔开echo 和net use 这二个命令;| 指建立了ipc$后,在结果中用find查看是否有"命令成功完成"信息;%1.%%G 为完整的IP地址;(1 1 254) 指起始值,增长量,结止值。
@echo off
echo 用法格式:ok.bat ip
FOR /F %%i IN (D:\user.dic) DO smb.exe %1 %%i D:\pass.dic 200
存为:ok.exe 说明:输入一个IP后,用字典文件d:\pass.dic来暴解d:\user.dic中的用户密码,直到文件中值取完为止。%%i为用户名;%1为输入的IP地址(默认)。
2:if命令及变量 基本格式:
IF [not] errorlevel 数字 命令语句 如果程序运行最后返回一个等于或大于指定数字的退出编码,指定条件为“真”。
例:IF errorlevel 0 命令 指程序执行后返回的值为0时,就值行后面的命令;IF not errorlevel 1 命令指程序执行最后返回的值不等于1,就执行后面的命令。
0 指发现并成功执行(真);1 指没有发现、没执行(假)。
IF [not] 字符串1==字符串2 命令语句 如果指定的文本字符串匹配(即:字符串1 等于 字符串2),就执行后面的命令。
例:“if "%2%"=="4" goto start”指:如果输入的第二个变量为4时,执行后面的命令(注意:调用变量时就%变量名%并加" ")
IF [not] exist 文件名 命令语句 如果指定的文件名存在,就执行后面的命令。
例:“if not nc.exe goto end”指:如果没有发现nc.exe文件就跳到":end"标签处。
IF [not] errorlevel 数字 命令语句 else 命令语句或 IF [not] 字符串1==字符串2 命令语句 else 命令语句或 IF [not] exist 文件名 命令语句 else 命令语句 加上:else 命令语句后指:当前面的条件不成立时,就指行else后面的命令。注意:else 必须与 if 在同一行才有效。 当有del命令时需把del命令全部内容用< >括起来,因为del命令要单独一行时才能执行,用上< >后就等于是单独一行了;例如:“if exist test.txt. <del test.txt.> else echo test.txt.missing ”,注意命令中的“.”


好好读读,可以写不少有用的东东呢~~~

[ 阅读全文 | 回复(0) | 引用通告 | 编辑

  Post  by  badboy 发表于 2006-8-21 12:29:01
发表评论:
数据载入中,请稍候......
数据载入中,请稍候......