DOS批处理

接到一个小任务,写一个批处理脚本, 判断某个IP所在的主机能否ping通,并统计ping的结果,结果保存到文件

除了echo命令之外其余的都不怎么会用, 那就现学吧!

从这些命令开始set, for, find, if, 还有goto等等

特殊符号如:^、%%、!!、&、&&、||、>、>>

特殊变量:errorlevel,保存上一条命令的执行结果,比如执行type new.txt | find "hello", 如果new.txt文件中存在hello字样,则errorlevel为0,否则为1


set /p str=请输入:   等待用户输入

set a=1                 定义变量

set /a a+=1           算术运算

set "path=c://"      定义环境变量的另一种方法, 否则需要用到转义符号 ^

set /p =01 <null     不带回车输出01字样

set newvar = %oldvar:str1=str2%   将oldvar变量中的str1替换为str2,并赋值给newvar


for "eol=. skip=3 tokens=2 delims== "%%i in (collection) do  --->tokens表示筛选出第2列,delims表示用"="分割字符串, eol表示忽略以'.'开头的行, skip表示忽略前3行

for语句中的累加变量需要使用!!来引用, 需要在此之前执行setlocal enabledelayedexpansion

for /D  collection中表示目录

for /R  collection中递归所有指定或当前目录下的文件和目录, /R后面若没有指定目录则为当前目录

for /L  collection为迭代范围     for /L %%i  (1 1 5) do   -->i从1开始循环到5

for /F  用的最多 可以为 字符串"",文件,command 用单引号括起来''


 

if语句的执行范围问题,包括逻辑运算符的问题 ==, equ,neq,lss,leq,gtr,geq

if exist filename (   :: 尼玛exist错写成exsist半天都没找到问题在哪

echo exist

) else (    ::else必须和之前的括号放在同一行中

echo not exist

)

if /i  忽略大小写

if defined path_variable

if errorlevel num  等价于  if %errorlevel% geq num


最后完成的小程序为

@echo off
setlocal enabledelayedexpansion
set success=0
set total=0  
date /t > file.txt

:doitagain
time /t >> file.txt
for /f  "tokens=2 delims=," %%i in ('ping 192.168.0.1 -n 5 ^| find "Received"') do (
    echo %%i
    for /f "tokens=2 delims==" %%j in ("%%i") do (
        echo %%j
        set /a success+=%%j
        set /a total+=5
        echo 总共ping了 !total! 次 >> file.txt
        echo ping通次数 !success! >>file.txt
    )
)
goto doitagain
pause

 

 

 

 

posted @ 2012-05-15 17:48  戈壁子规  阅读(295)  评论(0)    收藏  举报