[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]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
复制代码

回复 19# yiwuyun

昨天运行成功了,可是今天无论如何不行了,运行都第二个的时候就无法调用VBS

TOP

回复 19# yiwuyun
多谢!你这个延迟变量的代码,刚才试了一下,成功了一次,失败了一次,暂时没搞明白是哪里出了问题

TOP

重命名代码
  1. @echo on
  2. setlocal enabledelayedexpansion
  3. set n=0
  4. for /f "delims=" %%a in ('dir /b *.vbs') do (
  5.     if !n! equ 0 (
  6.         set skip=
  7.     ) else (
  8.         set "skip=skip=!n!"
  9.     )
  10.     call :ChangeName "%%a" "!skip!"
  11.     set /a n+=1
  12. )
  13. goto :eof
  14. :ChangeName
  15. for /f "%~2 delims=" %%b in (ip.txt) do (
  16.     ren %1 "%%b.vbs"
  17.     goto :eof
  18. )
复制代码
回复 20# pcl_test

TOP

没试过,如果不能。那只有用call调用了。
set a=!count!.vbs
call :csc !a!
exit /b 0

:csc
cscript //nologo %1
exit /b 0

如果还不行,没法了。

TOP

回复 19# yiwuyun

开启延迟变量  这样能运行吗
  1. set /a count+=1
  2. cscript //nologo !count!.vbs
复制代码

TOP

回复 17# kuishilova
重命名什么的很容易的,自己试着把重命名批处理写出来,不要总想着吃现成的

TOP

[code]
@echo off
setlocal EnableDelayedExpansion
  :wait
  set a=
  set/p a=输入S开始配置:
  if %a%==s goto :startconf
  if %a%==q goto :end
  goto :wait
  :startconf
  echo 交换机配置结果:>>配置结果.txt
  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&& set /a count+=1  && cscript //nologo telnet_tmp.vbs && cscript //nologo !count!.vbs && del telnet_tmp.vbs && echo %%i配置成功 && echo %%i配置成功>>配置结果.txt
  
  echo ----------------结果说明---------------
  echo 配置完毕!
  echo 共配置可以联通的交换机:%count%台。
  echo 配置的结果保存在当前目录的“配置结果.txt”中。
  echo ---------------------------------------
  echo 按任意键返回主菜单
  pause>nul
  goto :wait
  :end

TOP

回复 16# pcl_test


    或者创建一个命令组的文本文档,内容为:
命令组1-----------------
第1行命令组1的内容
第2行命令组1的内容
。。。。
第n行命令组1的内容

命令组2-------------
第1行命令组2的内容
第2行命令组2的内容
。。。。
第n行命令组2的内容
。。。。。。

命令组x-------------
第1行命令组x的内容
第2行命令组x的内容
。。。。
第n行命令组x的内容

在批处理内增加一个计数器,每循环一次,就从命令组文档内提取对应的命令组的所有行,追加进入telnet_tmp.vbs,这样telnet_tmp.vbs就完成了所有的命令,它运行完成以后删除telnet_tmp.vbs,计数器接着就加一、进入下一次循环。我不知道这样做和之前的思路相比,是否跟更复杂?

TOP

本帖最后由 kuishilova 于 2015-2-1 00:10 编辑

回复 16# pcl_test
多谢了!
可是,能否做到不使用相应的IP命名?或者再给我一个按顺序提取ip地址出来给vbs重命名的脚本?因为我有至少60ip地址在ip.txt文档内,也就是说我事先已经做好了60组vbs脚本命令,按照1.va、2.vbs、3.vbs。。。。。一直到60.vbs已经命名完成了。那么,如果要使用你之前帮我写出来的代码,那么我就必须要按顺序提取ip.txt文档里面的六十个ip地址作为文件名,一一对应地把六十个vbs文件重命名。

TOP

本帖最后由 pcl_test 于 2015-1-31 22:34 编辑

回复 15# kuishilova
把1.vbs、2.vbs……以相应的ip重命名
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. color a
  4. :wait
  5. cls
  6. echo 1、进行配置
  7. echo 2、退出
  8. set a=0
  9. set/p a=请选择:
  10. if %a%==1 goto :startconf
  11. if %a%==2 exit
  12. goto :wait
  13. :startconf
  14. echo 交换机配置结果:>>配置结果.txt
  15. set count=0
  16. for /f "delims=" %%i in (ip.txt) do (
  17. set temp=0
  18. echo 正在扫描 %%i
  19. echo 请等待........
  20. ping -n 1 -w 2 %%i|find "TTL" >nul&&set temp=1
  21. if "!temp!" equ "1" (
  22. echo 扫描%%i完成,正在执行配置工作...
  23. >telnet_tmp.vbs echo set sh=WScript.CreateObject^("WScript.Shell"^)
  24. >>telnet_tmp.vbs echo WScript.Sleep 300
  25. >>telnet_tmp.vbs echo sh.SendKeys "open %%i"
  26. >>telnet_tmp.vbs echo WScript.Sleep 1000
  27. >>telnet_tmp.vbs echo sh.SendKeys "{ENTER}"
  28. >>telnet_tmp.vbs echo WScript.Sleep 1000
  29. start telnet
  30. ping -n 2 127.1 >nul
  31. cscript //nologo telnet_tmp.vbs
  32. ping -n 2 127.1 >nul
  33. cscript //nologo %%i.vbs
  34. del telnet_tmp.vbs
  35. set /a count+=1
  36. echo %%i配置成功
  37. echo %%i配置成功>>配置结果.txt
  38. ) else (
  39. echo %%i无法ping通!
  40. echo %%i配置失败>>配置结果.txt
  41. )
  42. )
  43. echo ----------------结果说明---------------
  44. echo 配置完毕!
  45. echo 共配置可以联通的交换机:%count%台。
  46. echo 配置的结果保存在当前目录的“配置结果.txt”中。
  47. echo ---------------------------------------
  48. echo 按任意键返回主菜单
  49. pause>nul
  50. goto :wait
复制代码

TOP

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

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

TOP

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

TOP

回复 12# pcl_test

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

TOP

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

TOP

返回列表