标题: [其他] 批处理脚本中有for循环,循环后语句不执行原因找不到 [打印本页]
作者: china_abcd 时间: 2018-8-19 06:29 标题: 批处理脚本中有for循环,循环后语句不执行原因找不到
- rem 作了实现自动备份网络交换机配置的BAT,原本1个bat负责生成登录VBS,另一个bat负责执行VBS,成功后尝试将2个bat合并为1个bat。但合并后第二个for后任何语句都未被执行?找不到原因
- rem 测试环境win7_32,win7_64
- rem 0_SW_QB.txt文件内容
- rem 思科 10.131.55.252 name mima
- rem 华为 10.131.55.251 name mima
- @echo off
- setlocal EnableDelayedExpansion
- rem 本目录下有my_tftp_ip.txt则读其内容,否则就使用10.131.55.65作为tftp地址
- if exist "%~dp0my_tftp_ip.txt" (
- for /f "tokens=1 delims=" %%g in (%~dp0my_tftp_ip.txt) do (
- set myiptftp_loc=%%g
- echo "___exist my_tftp_ip.txt"!myiptftp_loc!
- goto hq_tftp_end
- )
-
- ) else (
- set myiptftp_loc=10.131.55.65
- echo "no exist my_tftp_ip.txt"%myiptftp_loc%
- )
- :hq_tftp_end
-
- mode con cols=100 lines=40
-
- for /f "tokens=1,2,3,4 delims= " %%a in (%~dp00_SW_QB.txt) do (
- set myipdldz_loc=%%b
- set myipyong_loc=%%c
- set myipmima_loc=%%d
- if "%%a"=="华为" (
- echo 2_SCJBHW.bat %%b %%c %%d %myiptftp_loc% %%a
- %~dp02_SCJBHW.bat %%b %%c %%d %myiptftp_loc%
- ) else (
- if "%%a"=="思科" (
- echo 2_SCJBSK.bat %%b %%c %%d %myiptftp_loc% %%a
- %~dp02_SCJBSK.bat %%b %%c %%d %myiptftp_loc%
- ) else ( echo "发现非思科 非华为")
- )
-
- )
-
- rem 上面代码(根据交换机品牌生成不同登录VBS脚本)正常执行,但下面添加的代码就不执行了
- rem 原本是想依次执行前面生成的vbs文件,但不执行,替换下面简单代码也不执行
-
- echo "结束生成vbs,---------开始调用vbs"
- pause
复制代码
作者: 0000 时间: 2018-8-19 08:59
当从一个批处理调用另一个批处理时必须用call
call %~dp02_SCJBHW.bat
不然相当于goto到该批处理开头而不能返回- for /f "tokens=1-4 delims= " %%a in (%~dp00_SW_QB.txt) do (
- set myipdldz_loc=%%b
- set myipyong_loc=%%c
- set myipmima_loc=%%d
- if "%%a"=="华为" (
- echo 2_SCJBHW.bat %%b %%c %%d %myiptftp_loc% %%a
- call %~dp02_SCJBHW.bat %%b %%c %%d %myiptftp_loc%
- ) else if "%%a"=="思科" (
- echo 2_SCJBSK.bat %%b %%c %%d %myiptftp_loc% %%a
- call %~dp02_SCJBSK.bat %%b %%c %%d %myiptftp_loc%
- ) else (
- echo "发现非思科 非华为"
- )
- )
复制代码
作者: china_abcd 时间: 2018-8-20 08:07
回复 2# 0000
call命令是知道的,这里主要是询问原代码第2个for循环执行完后,就不继续执行后面的
echo "结束生成vbs,---------开始调用vbs
pause
语句,CMD窗口直接消失。
我需要找到原因,因为希望第二个for循环执行完后,还可执行其它命令。谢谢!
作者: Batcher 时间: 2018-8-20 09:37
回复 3# china_abcd
按照2楼的方法加上call命令之后也没有效果是吗?
2_SCJBHW.bat 或 2_SCJBSK.bat 里面是不是有 exit 命令?
作者: china_abcd 时间: 2018-8-25 05:09
回复 4# Batcher
谢谢大家的提醒,后来发现原代码中以下语句排版调整后可正常。
) else ( echo "发现非思科 非华为")
调整为如下就会执行for循环后的语句了。
) else (
echo "发现非思科 非华为"
)
由于bat编辑时无调试环境,有时出错在哪也无法查询定位。不知大家会使用何种调试工具或辅助软件。谢谢!
另外还有个问题(准备另建主题),这个bat文件手工执行正常,在win操作系统环境下,通过任务计划调用,因为
有类似 start telnet
cscript //nologo %~dp0!myipdldz_loc!.vbs
任务计划调用后会打开新窗口,但会切换输入法到中文,以致命令都成乱码?不知大家有解决方法吗?
我后来尝试找一台无用的虚拟机,删除中文输入法,可以避免这种情况,但还是希望能在普通系统上实现此功能。
谢谢!
作者: china_abcd 时间: 2018-8-25 05:15
回复 2# 0000
仔细看了你的回复,谢谢!发现你已经代码排版调整了。
) else (
echo "发现非思科 非华为"
)
请问bat有编程调试工具吗?
作者: Batcher 时间: 2018-8-25 11:52
回复 5# china_abcd
养成好的编码风格很重要。我使用Nodepad++
http://bbs.bathome.net/thread-3534-1-1.html
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |