批处理程序:自动登陆服务端,并循环执行某些命令
下面是最近工作中遇到的问题时的解决方法
********博客园-邦邦酱好********
在进行稳定性测试的过程中,发现程序对于配置参数后有一定的延迟,不确定是否是由于多次进行命令行参数配置导致。于是我就写了一个脚本,每隔15秒左右进行一次命令行参数配置的输入,让它在我下班的时候运行,观察长时间进行参数配置后,是否会出现延迟。
一. 注意要点:
echo sh.SendKeys 对于特殊字符的使用,我当时需要输入{这样类似的字符WshShell.SendKeys "{“,但是一直出错,后来查了下,才知道其中大有文章~~下面是网上的一些总结:
对于需要与Shift、Ctrl、Alt三个控制键组合的按键,SendKeys使用特殊字符来表示:
Shift---------WshShell.SendKeys "+"
Ctrl---------WshShell.SendKeys "^"
Alt---------WshShell.SendKeys "%" (注意:这样使用时,不用大括号括起这些特殊字符。)
由于“+”、“^”这些字符用来表示特殊的控制按键了,如何表示这些按键呢? 只要用大括号括住这些字符即可。例如: 要发送加号“+”,可使用WshShell.SendKeys "{+}"。所以如果我要输入括号{},那就要这样写:“WshShell.SendKeys "{{}" ,“WshShell.SendKeys "{}}"啦!
另外对于一些不会生成字符的控制功能按键,也同样需要使用大括号括起来按键的名称。
例如要发送回车键,需要用“ WshShell.SendKeys "{ENTER}" ”表示;
发送向下的方向键用“ Wshell.SendKeys "{DOWN}" ”表示。
Space---------WshShell.SendKeys " "
Enter---------WshShell.SendKeys "{ENTER}"
←---------WshShell.SendKeys "{RIGHT}"
↑---------WshShell.SendKeys "{UP}"
F1---------WshShell.SendKeys "{F1}"
Ctrl---------WshShell.SendKeys "^"
Alt---------WshShell.SendKeys "%" (注意:这样使用时,不用大括号括起这些特殊字符。)
由于“+”、“^”这些字符用来表示特殊的控制按键了,如何表示这些按键呢? 只要用大括号括住这些字符即可。例如: 要发送加号“+”,可使用WshShell.SendKeys "{+}"。所以如果我要输入括号{},那就要这样写:“WshShell.SendKeys "{{}" ,“WshShell.SendKeys "{}}"啦!
另外对于一些不会生成字符的控制功能按键,也同样需要使用大括号括起来按键的名称。
例如要发送回车键,需要用“ WshShell.SendKeys "{ENTER}" ”表示;
发送向下的方向键用“ Wshell.SendKeys "{DOWN}" ”表示。
Space---------WshShell.SendKeys " "
Enter---------WshShell.SendKeys "{ENTER}"
←---------WshShell.SendKeys "{RIGHT}"
↑---------WshShell.SendKeys "{UP}"
F1---------WshShell.SendKeys "{F1}"
按键 | 代码 |
BACKSPACE | {BACKSPACE}, {BS}, 或 {BKSP} |
BREAK | {BREAK} |
CAPS LOCK | {CAPSLOCK} |
DEL or Delete |
{Delete} 或 {DEL} |
DOWN ARROW |
{DOWN} |
END |
{END} |
ENTER | {ENTER}或 ~ |
ESC | {ESC} |
HELP | {HELP} |
HOME | {HOME} |
INS or Insert | {Insert} 或 {INS} |
LEFT ARROW | {LEFT} |
NUM LOCK | {NUMLOCK} |
PAGE DOWN | {PGDN} |
PAGE UP | {PGUP} |
PRINT SCREEN | {PRTSC} |
RIGHT ARROW | {RIGHT} |
SCROLL LOCK | {SCROLLLOCK} |
TAB | {TAB} |
UP ARROW | {UP} |
F1-F9 |
{F1}-{F9} |
Tips:如果需要发送多个重复的单字母按键,不必重复输入该字母,SendKeys允许使用简化格式进行描述,使用格式为“{按键 数字}”。例如要发送10个字母“x”,则输入“WshShell.SendKeys "{x 10}"”即可。
二. 脚本
下面是当时运行的脚本,仅供参考。
a.bat:配置相关参数,调用b.bat脚本进行命令输入。
@echo off&setlocal enabledelayedexpansion :::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::相关配置:::::::::::::::::::: :::::::::::::::::::::::::::::::::::::::::::::: ::服务器地址 set url=192.168.0.111 ::telnet上服务器时的用户名和密码 set userid=bangbangjiang set password=hao ::循环的次数 set looptimes=1 ::执行telnet服务端并输入命令的脚本 call b.bat echo 脚本终止!
b.bat:telnet登陆服务端,进行密码验证,再循环输入参数配置命令
@echo off&setlocal enabledelayedexpansion echo set sh=WScript.CreateObject("WScript.Shell") >telnet_tmp.vbs :::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::登录:::::::::::::::::::::: :::::::::::::::::::::::::::::::::::::::::::::: echo 开始进行登陆操作... echo WScript.Sleep 2000 >>telnet_tmp.vbs echo sh.SendKeys "%userid%{ENTER}" >>telnet_tmp.vbs echo WScript.Sleep 2000 >>telnet_tmp.vbs echo sh.SendKeys "%password%{ENTER}" >>telnet_tmp.vbs echo WScript.Sleep 2000 >>telnet_tmp.vbs :::::::::::::::::::::::::::::::::::::::::::::: :::::::::::::::循环输入命令::::::::::::::::::: :::::::::::::::::::::::::::::::::::::::::::::: :round echo %looptimes% if "%looptimes%"=="1000" goto end ::配置参数,循环输入命令:echo Key=12 Cmd=SetParam Params={Param1=1,Param2=2} > /tmp/testfile echo sh.SendKeys "echo Key=12 Cmd=SetParam Params={{}Param1=1,Param2=2{}} > /tmp/testfile{ENTER}" >>telnet_tmp.vbs echo WScript.Sleep 10000 >>telnet_tmp.vbs echo sh.SendKeys "{ENTER}" >>telnet_tmp.vbs echo sh.SendKeys "cat /tmp/testfile{ENTER}" >>telnet_tmp.vbs echo WScript.Sleep 5000 >>telnet_tmp.vbs echo sh.SendKeys "{ENTER}" >>telnet_tmp.vbs set /a looptimes+=1 goto round :end start telnet %url% cscript telnet_tmp.vbs del telnet_tmp.vbs
程序运行已经通过的,不过我修改了一些服务器信息(公司资料要保密嘛~~~~(>_<)~~~~ ),如果有任何问题,欢迎指正~~
运行的时候只需要在windows下使用cmd.exe窗口,切换到以上程序的所在目录,输入a.bat按下回车键即可。