您的位置:首页 > 其它

批处理程序:自动登陆服务端,并循环执行某些命令

2014-12-10 11:10 561 查看
下面是最近工作中遇到的问题时的解决方法
********博客园-邦邦酱好********

在进行稳定性测试的过程中,发现程序对于配置参数后有一定的延迟,不确定是否是由于多次进行命令行参数配置导致。于是我就写了一个脚本,每隔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}"

按键代码
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按下回车键即可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐