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


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

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

  • 相关阅读:
    python 读csv文件时,在csv类型上执行类型转换
    python 读csv文件对列名进行合法性验证
    python 读csv数据 通过改变分隔符去掉引号
    python 写csv文件
    python 简单了解namedtuple
    python 读csv格式的文件
    python 序列化,反序列化
    PyQt5 笔记(05):信号/槽
    PyQt5 笔记(04):主窗口卡死问题
    PyQt5 笔记(03):弹出窗口大全
  • 原文地址:https://www.cnblogs.com/bangbangjiang/p/4154952.html
Copyright © 2020-2023  润新知