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

下面是最近工作中遇到的问题时的解决方法
********博客园-邦邦酱好********

 

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

 

posted @ 2014-12-10 11:10  邦邦酱好  阅读(1869)  评论(1编辑  收藏  举报