[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] BAT和VBS怎样批量对交换机进行不同配置?

因为工作需要,需对大量交换机进行配置,比如我有二十台交换机,每一个交换机都需要一系列不一样的配置,我的思路是将这二十台交换机ip地址放入”ip.txt"当中,另外分别制作二十套具体的配置命令保存在一个txt文档里面并且用分隔符做成二十个段落,当执行批处理文件的时候每扫描一个ip之后读取指定的一段内容写入到临时的vbs文件当中、运行vbs脚本即可对该交换机进行配置,完成之后删除临时vbs脚本、扫描下一个ip,这个时候又从配置命令文档里面读取相应的段落写入临时vbs脚本文件、再执行,如此循环。或者我直接制作二十个vbs脚本,每扫描一个ip之后调用一个对应的vbs脚本文件进行执行。
我现在已经有一段代码(附在帖子最后),代码利用for循环实现对“ip.txt"文件当中的交换机列表按顺序读取,读取之后利用%%i变量将扫描到的ip以及对它的telnet命令写入临时vbs脚本实现telnet连接,另外制作交换机的具体配置命令保存在1.vbs当中,telnet连接交换机之后再调用这个脚本即可对交换机实现一系列的配置命令。但是这个小程序只能实现对列表当中的所有交换机进行相同的配置,而我现在需要对交换机进行不同配置
请大家帮忙,我应该怎样修改这个批处理程序才能实现我想要的功能?谢谢
  1. @echo off
  2.   :wait
  3.   set a=
  4.   set/p a=输入S开始配置:
  5.   if %a%==s goto :startconf
  6.   if %a%==q goto :end
  7.   goto :wait
  8.   :startconf
  9.   echo 交换机配置结果:>>配置结果.txt
  10.   for /f %%i in (ip.txt) do echo 正在扫描 %%i && echo 请等待........&& ping -n 1 -w 2 %%i -n 2|find "TTL">nul && echo 扫描%%i完成,正在执行配置工作... && echo set sh=WScript.CreateObject("WScript.Shell") >telnet_tmp.vbs && echo WScript.Sleep 300 >>telnet_tmp.vbs && echo sh.SendKeys "open %%i" >>telnet_tmp.vbs && echo WScript.Sleep 1000 …… && echo sh.SendKeys "{ENTER}">>telnet_tmp.vbs && echo WScript.Sleep 1000 ……&& start telnet && cscript //nologo telnet_tmp.vbs && cscript //nologo 1.vbs && del telnet_tmp.vbs && set /a count+=1 && echo %%i配置成功 && echo %%i配置成功>>配置结果.txt
  11.   
  12.   echo ----------------结果说明---------------
  13.   echo 配置完毕!
  14.   echo 共配置可以联通的交换机:%count%台。
  15.   echo 配置的结果保存在当前目录的“配置结果.txt”中。
  16.   echo ---------------------------------------
  17.   echo 按任意键返回主菜单
  18.   pause>nul
  19.   goto :wait
  20.   :end
复制代码

回复 1# kuishilova

1、临时vbs的代码一样吧,除了ip不同外?
2、把临时vbs的代码发出来

TOP

本帖最后由 kuishilova 于 2015-1-31 20:17 编辑

回复 2# pcl_test

临时的vbs脚本就是在我帖子最后贴出来的代码前面一半,后面的具体配置命令在1.vbs文件内,根据交换机不同,是不一样的,我的目的只是利用批处理调用它们,所以它们的具体内容是什么在这里不重要。
比如我这个代码里面,每次从IP.txt文档里读取一个ip(每个ip一行),就按顺序执行后面的脚本,最后调用“1.vbs”里面的脚本代码,这样的结果就是所有交换机都进行了相同的配置(即1.vbs文件里面的脚本),但我是希望实现读取第一个ip之后调用“1.vbs”,读取第二个ip之后调用“2.vbs”,第三个ip调用“3.vbs”.....这样一个循环。

TOP

回复 2# pcl_test
这一段就是临时的vbs代码,实现的是按顺序读取ip.txt文档内的每一个ip,然后用telnet连接。紧接着这段临时代码之后就是调用1.vbs,这个文件里面就是具体的交换机配置命令
  1. echo set sh=WScript.CreateObject("WScript.Shell") >telnet_tmp.vbs && echo WScript.Sleep 300 >>telnet_tmp.vbs && echo sh.SendKeys "open %%i" >>telnet_tmp.vbs && echo WScript.Sleep 1000 …… && echo sh.SendKeys "{ENTER}">>telnet_tmp.vbs && echo WScript.Sleep 1000 ……&& start telnet && cscript //nologo telnet_tmp.vbs
复制代码

TOP

回复 3# kuishilova
你没懂我问的意思,从你发的代码看,不知是不是你省略了一些字符,因为telnet_tmp.vbs的生成是有问题的,所以才问你要telnet_tmp.vbs的完整代码,至于1.vbs,自然是了解只是调用,所以我根本就没问它里面是什么内容

TOP

回复 5# pcl_test
临时脚本的代码内容就是这一段,没有问题的。这一段代码就是创建临时脚本telnet_tmp.vbs,它能实现的功能就是根据当前的循环变量%%i的变化,每次循环的时候把不同的ip地址写入telnet_tmp.vbs,最后执行telnet_tmp.vbs脚本就可以实现每次循环打开一个不同的ip地址。我原有的完整代码里面,紧接着telnet_tmp.vbs之后就是调用1.vbs。当1.vbs运行结束之后,删除telnet_tmp.vbs,然后进入下一次循环。我希望能做到的是,当进入下一次循环、执行telnet_tmp.vbs以后调用另外一个vbs。
  1. echo set sh=WScript.CreateObject("WScript.Shell") >telnet_tmp.vbs && echo WScript.Sleep 300 >>telnet_tmp.vbs && echo sh.SendKeys "open %%i" >>telnet_tmp.vbs && echo WScript.Sleep 1000 …… && echo sh.SendKeys "{ENTER}">>telnet_tmp.vbs && echo WScript.Sleep 1000 ……&& start telnet && cscript //nologo telnet_tmp.vbs
复制代码

TOP

本帖最后由 pcl_test 于 2015-1-31 20:55 编辑

回复 6# kuishilova
那就是省略了一些字符啦,因为你的代码最后一个“echo WScript.Sleep 1000 ”有什么用呢?

TOP

回复 7# pcl_test

没省略啊,这是个完整可以正确执行的代码。结果就是按顺序读取ip.txt文档当中的ip地址,然后telnet连接,最后按照1.vbs里面的脚本命令对交换机进行配置。

TOP

回复 8# kuishilova

你就单独把这段写进批处理运行下,看看生成的vbs有没缺失代码
  1. echo set sh=WScript.CreateObject("WScript.Shell") >telnet_tmp.vbs && echo WScript.Sleep 300 >>telnet_tmp.vbs && echo sh.SendKeys "open %%i" >>telnet_tmp.vbs && echo WScript.Sleep 1000 …… && echo sh.SendKeys "{ENTER}">>telnet_tmp.vbs && echo WScript.Sleep 1000 ……
复制代码

TOP

回复 9# pcl_test
  1. set sh=WScript.CreateObject("WScript.Shell")  
  2. WScript.Sleep 300  
  3. sh.SendKeys "open 192.255.64.132"  
  4. sh.SendKeys "{ENTER}"
复制代码
上面这就是临时vbs脚本生成的结果,其中192.255.64.132就是ip.txt文档当中的一条ip地址,每找到一条ip之后程序就会按照这样生成临时vbs并且运行,实现对不同ip的telnet连接,紧接着调用1.vbs里面的脚本进行交换机的配置。
兄弟!咱能不能不要纠结这段代码的运行结果是否正常啊?更何况这个代码没有问题啊,我正常运行了的,
我现在需要的是找到办法修改临时vbs运行以后的后半段代码,就是调用1.vbs的部分,使它能够实现随着前面变量的改变而选择调用不同的vbs脚本

TOP

回复 9# pcl_test
echo WScript.Sleep 1000这一句的目的是让它等待一秒钟,避免因为网络延迟或者系统延迟造成后面的命令无法正常执行。

TOP

回复 10# kuishilova
呵呵,其实你的问题很好解决,我跟你说的那些,都跟解决问题有关的

TOP

回复 12# pcl_test

好吧。。。。那能否请你直接说出解决办法啊?我找了很多资料都没有想出解决办法。

TOP

回复 11# kuishilova
那么为什么没在telnet_tmp.vbs生成?是否多余呢?

TOP

回复 14# pcl_test
1.vbs里面是一组配置命令,几十条不等。每一个ip都有不同的一组配置需求,所以我考虑的是针对性地制作若干组配置命令放进不同的vbs脚本(1.vbs、2.vbs、3.vbs、4.vbs。。。。。。),然后每扫描一个ip打开telnet以后就调用一个不同vbs脚本。至于这些脚本是否写入临时vbs里面都是一样的。
或者也可以把所有命令组放进一个txt文本文档里,使用字符串分隔开,然后通过批处理读取的时候选择性读取不同的段落,但我觉得那样可能更复杂,还不如调用不同的vbs脚本文件更简单。

兄弟,你能否直接说的答案啊?

TOP

返回列表