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

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

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

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

百度问答上找到一个方法可以实现多线程,原理:利用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脚本来编写。

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

时间: 2024-11-16 09:23:48

批处理实现多线程执行命令列表文件的相关文章

ssh批量登录 上传 执行命令 下载文件

用途: 搞linux主机的内网,拿到通用的账户密码,批量登录,上传系统信息收集脚本,把执行的结果拉回本地,用于分析. 缺点: 不支持多线程  密码必须正确切可连通  端口硬编码为22 如果不是22 请自行修改 执行过程: 执行ssh.py root root 会自动登录ssh,上传本地文件目录下的1.py文件到linux服务器tmp目录,执行/tmp/1.py文件,删除/tmp/1.py文件,把1.py执行的文件的生成的test.txt下载回本地.注意:下载的文件名已硬编码在1.py文件28行,

python批量执行命令发送文件

#!/usr/bin/python #-*- coding: utf-8 -*- import paramiko import datetime import os,tab,sys from multiprocessing import Process, Pool host_list = ( ('192.168.1.127','root','123456'), ('192.168.1.137','root','123456'), ('192.168.1.143','root','123456')

使用ssh远程执行命令批量导出数据库到本地

前天正在跟前端的同事调试功能.服务器开好,模拟的玩家登录好,就在倒计时.这时突然运营的同事跑过来说要统计几个服务器玩家的一些情况,也就是需要从几个服的数据库导出部分玩家的数据.好吧,我看了一下时间,11:47.心想,跟前端调试完,去吃个饭再午休一下那就下午再给吧.没想对方来一句"就导个数据库而已,要这么久么?",而且还是直接跟我上司说的.我嚓,好吧,我导.可问题来了,平时的统计是由php做的,批量部署这些是由运维做的.服务端完全没有对应的工具.而且服务器是在阿里云上的,数据库的用户是限

使用ssh远程执行命令批量导出数据库到本地(转)

前天正在跟前端的同事调试功能.服务器开好,模拟的玩家登录好,就在倒计时.这时突然运营的同事跑过来说要统计几个服务器玩家的一些情况,也就是需要从几个服的数据库导出部分玩家的数据.好吧,我看了一下时间,11:47.心想,跟前端调试完,去吃个饭再午休一下那就下午再给吧.没想对方来一句"就导个数据库而已,要这么久么?",而且还是直接跟我上司说的.我嚓,好吧,我导.可问题来了,平时的统计是由php做的,批量部署这些是由运维做的.服务端完全没有对应的工具.而且服务器是在阿里云上的,数据库的用户是限

ansible批量执行命令

批量管理linux服务器指的是:批量执行命令.下发文件等等 安装ansible 1.1: 安装epel源 yum install epel-release -y #编辑/etc/yum.repos.d/epel.repo,注释mirrorlist,打开baseurl 1.2: 安装ansible yum list ansible #ansible版本,如果这个命令运行有问题的话,多运行几次 yum install ansible -y 1.3: ansible查看帮助 ansible-doc -

python3 实现堡垒机功能(并发执行命令及上传下载文件)

转载请注明出处,欢迎提出宝贵意见,谢谢! 功能介绍: 1.主机分组 登录后显示分组主机及主机数量 选择主机组后显示该主机组下所有主机信息,主机名及IP显示输入选择:1.执行命令利用线程并发组内所有主机同时执行命令,并将结果,返回格式为:----------------------host1------------------ ----------------------host2------------------ ----------------------host3-------------

Windows批处理 调用程序后 不等待子进程 父进程继续执行命令

从DOS过来的老鸟应该都知道批处理,这个功能在WINDOWS中仍然保留着.批处理 说白了就是把一系列DOS命令写在一个文本文件里,然后把这个文件命名为XXX.bat(WINXP以后的系统也可以命名为*.cmd),然后运行它就可 以一次执行一系列命令和程序了,当然也包括WINDOWS下的程序. 昨天处理一个问题时需要写一个批处理,批处理的前面运行了几个DOS命令,最后调用一 个WINDOWS程序.可问题是,调用的WINDOWS程序打开后,CMD命令提示符窗口不会关闭,而是要等待这个WINDOWS程

python脚本 对批量机器执行命令和发送文件

背景:对linux服务器批量执行命令和批量发送文件是运维自动化过程中的最基础的,本脚本就是实现这个功能,shell通过expect也可以实现类似功能. 本脚本用到了pexpect模块,没有该模块的需要手动安装. 该脚本有4个功能: 对被管理的服务器批量执行命令 批量发送本地文件到被管理机器上 支持服务器分组 支持IP地址序列 脚本配置文件如下: [WEB] 192.168.56.102 root liu123 192.168.56.103 root liu123 [DB] 192.168.56.

expect脚本同步文件、指定host和要同步的文件、构建文件分发系统、批量远程执行命令

expect脚本同步文件 1.自动同步文件 [[email protected] shell]# vi 4.expect 增加如下脚本内容: #!/usr/bin/expect set passwd "123456" spawn rsync -av [email protected]:/tmp/12.txt /tmp/ expect { "yes/no" { send "yes\r"} "password:" { send &