• 批处理实现多线程执行命令列表文件


    批处理实现多线程执行命令列表

     

    工作中碰到多线程执行命令列表的情况,研究一番,编写出来与大家分享。高手看了也请指点,指教一些更简单的办法。

    批处理是一种单线程的简单脚本,只有上条命令执行完后,才能执行下条命令。如果上条命令执行花费很长时间,如超时,连接失败不断尝试等,下一条命令头发白了,可能还等不到它执行。

    百度问答上找到一个方法可以实现多线程,原理:利用bat调用bat来实现多线程。

     

    例如:网管希望同时ping局域中所有主机,实现方法如下。

    首先,建立两个批处理文件;

    1.bat文件代码如下:

     for /l %%i in (2,1,10) do start 2.bat 192.168.0.%%i   

     

    2.bat文件代码如下:

    ping %1 -n 10

     

    运行1.bat后,1.bat调用2.bat,可以实现多线程。测试时可以看到屏幕上刷的出现了一大片的窗口,每个窗口都独立运行。

     

    实现了多线程的目标了,下面解决执行命令列表。举个探测端口的例子。网管希望多线程同时执行端口验证的命令。 

    把要命令都存放在文件cmdlist.txt中

    cmdlist.txt文件代码如下:

    telnet 10.1.1.1 22

    telnet 10.1.1.1 80

    telnet 10.1.1.1 443

    telnet 10.1.1.1 8080

     

    多线程需要的2个bat ,内容如下:

    1.bat文件代码如下:

     for /l %%i in (1,1,4) do start 2.bat %%i 

    ::一个for循环,从1到4,10是cmdlist.txt中命令的行数,步长为1,调用2.bat,传递参数%%i。 %%i是指cmdlist.txt中命令的序号。不懂的童鞋自己找资料。

     

    2.bat文件代码如下:

    @echo off ::关闭回显

    setlocal enabledelayedexpansion ::变量延迟

    for /f "tokens=*" %%i in (cmdlist.txt) do (

    set /a  n+=1         ::设置自变量表达式

    if "!n!"=="%1" echo %%i|cmd   ::执行第%%i行命令

    )

     

    批处理语言可读性比较差,问了一些朋友,他们建议用VBS脚本来编写。

    如果工作中碰到类似的需求,只要把上面代码稍加修改就可以用了。

  • 相关阅读:
    (原创)常用加密解密
    Winforms和资源(Resources/resx)
    delphi中的第三方控件如何安装 (转)
    IT博客
    访问FTP (转)
    设置radasm,使其支持8086 16位asm(转)
    EditPlus注册码(转)
    windows资源管理器已停止工作 (转)
    当发生异常时,怎样能不让‘delphi的异常提示框出现’而出现自己的‘异常提示框’?
    清除复制网页带过来的背景颜色 (转)
  • 原文地址:https://www.cnblogs.com/pentesterlab-beginner/p/4043976.html
Copyright © 2020-2023  润新知