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

浙公网安备 33010602011771号