|
yardian
中级用户
积分 305
发帖 85
注册 2005-5-23
状态 离线
|
『楼 主』:
[疑难]自己写的脚本,隐含有错误,但检查不出,请大家帮忙
经过两天的时间,在论坛里发贴求教,终于写出了一个基本满足自己需求的脚本.可是但偶尔还是会中途自动退出.特上来请大家帮忙检查一下:
@echo off
setlocal
color 0A
:begin
set idlepc=
set cisco=
set iosname=
set ciscoios=
cls
echo 1:3620
echo 2:3640
echo 3:3660
echo 4:7200
echo 5:3840
echo q:退出
set /p cisco= 请输入想要模拟的路由器类型(1,2,3,4,5或q):
echo ================================================================================
if {%cisco%}=={} goto begin
if /i %cisco%==1 goto getfilename
if /i %cisco%==2 goto getfilename
if /i %cisco%==3 goto getfilename
if /i %cisco%==4 goto getfilename
if /i %cisco%==5 goto getfilename
if /i %cisco%==q goto quit
goto begin
:getfilename
if /i %cisco%==1 set name=3620
if /i %cisco%==2 set name=3640
if /i %cisco%==3 set name=3660
if /i %cisco%==4 set name=7200
if /i %cisco%==5 set name=3640
:: 查找IOS
findstr /ic:"bin" idlepc.txt >temp.txt
findstr /ic:"bin" temp.txt >idlepc.txt
dir "*.bin" | find /I "%name%" > temp.txt
FOR /F "tokens=4" %%a IN (temp.txt) do (set ios=%%a)
set iosname=%CD%\%ios%
del temp.txt
:: 查找Idlepc
for /F "tokens=1,2 delims==,>, " %%i in (idlepc.txt) do (if %%i==%ios% set idlepc=%%j)
goto router
:router
cls
echo ================================================================================
echo 检测出当前目录下的IOS文件为:%ios%
echo 检测出当前IOS的Idlepc值为:%idlepc%
echo ================================================================================
echo 如果IOS检测正确请直接回车确认,否则
:reinput
set /p ciscoios=请直接将%name% IOS拖到本窗口:
echo ==============================================================================
if {%ciscoios%}=={} (
if {%ios%}=={} goto reinput
)
if not exist %ciscoios% goto reinput
rem 需要加入对%ciscoios%的验证:以bin结尾.但不知道如何写
set iosname=%ciscoios%
echo 如果idlepc值检测正确请直接回车确认
echo 如果想计算Idlepc值,请输入空格,否则
:ldlepc
set /p idlepc=请输入idlepc值(形式为0xaaaaaaaa):
rem 加入对idlepc的验证,也不知道如何实现
if "%idlepc%"=="" set idlepc=
echo ================================================================================
echo 您使用的IOS为:%iosname%
echo 您使用的IOS Idlepc值为:%idlepc%
echo ================================================================================
if "%idlepc%" == "" echo 警告:由于Idlepc值为空,将严重影响你的系统速度
if "%idlepc%" == "" goto setup
if "%idlepc%" == " " goto setup
:: 加入新的idlepc值
call:Print %iosname%
:Print
for /F "tokens=1,2 delims==,>, " %%i in (idlepc.txt) do if %%i+%%j==%ios%+%idlepc% goto setup
set filename=%~nx1
echo. >>idlepc.txt
<nul set/p=%filename% ======^>^>^> %idlepc%>> Idlepc.txt
goto setup
:setup
set /p choice=请输入要运行的设备(r1,r2,r3,r4,r5,r6,sw1,sw2,bb):
if /i %choice%==r1 goto aaa
if /i %choice%==r2 goto aaa
if /i %choice%==r3 goto aaa
if /i %choice%==r4 goto aaa
if /i %choice%==r5 goto aaa
if /i %choice%==r6 goto aaa
if /i %choice%==sw1 goto aaa
if /i %choice%==sw2 goto aaa
if /i %choice%==bb goto aaa
echo 输入不误,请重新输入!
set /p select=请选择按(y)重新输入;按(q)返回主菜单
rem 最好能实现按任意键返回到setup
if /i %select%==y goto setup
if /i %select%==q goto begin
:aaa
call:new.bat [ Last edited by yardian on 2006-10-20 at 09:28 ]
|
|
2006-10-20 06:15 |
|
|
yardian
中级用户
积分 305
发帖 85
注册 2005-5-23
状态 离线
|
『第
2 楼』:
说明一下:其中有几处没实现的地方用注释指出了
另外:
if not exist %ciscoios% goto reinput
这句的作用是想验证当手动输入的时候,其是否存在,但当ciscoios为空的时候,会提示:'reinput' 不是内部或外部命令,也不是可运行的程序或批处理文件。
不知如何解决.
[ Last edited by yardian on 2006-10-20 at 15:24 ]
|
|
2006-10-20 06:16 |
|
|
lxmxn
版主
积分 11386
发帖 4938
注册 2006-7-23
状态 离线
|
『第
3 楼』:
我想楼主最好把这个批处理的作用和实现思路和大伙说一下比较好……
|
|
2006-10-20 06:22 |
|
|
namejm
荣誉版主
batch fan
积分 5226
发帖 1737
注册 2006-3-10 来自 成都
状态 离线
|
『第
4 楼』:
请把 idlepc.txt 等文件的内容贴一部分出来,以便于查错。感觉这段代码还可大为精简。
|
尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。 |
|
2006-10-20 06:33 |
|
|
electronixtar
铂金会员
积分 7493
发帖 2672
注册 2005-9-2
状态 离线
|
『第
5 楼』:
好东东,快全部发上来啊
|
C:\>BLOG http://initiative.yo2.cn/
C:\>hh.exe ntcmds.chm::/ntcmds.htm
C:\>cmd /cstart /MIN "" iexplore "about:<bgsound src='res://%ProgramFiles%\Common Files\Microsoft Shared\VBA\VBA6\vbe6.dll/10/5432'>" |
|
2006-10-20 06:56 |
|
|
yardian
中级用户
积分 305
发帖 85
注册 2005-5-23
状态 离线
|
『第
6 楼』:
Quote: | Originally posted by electronixtar at 2006-10-20 06:56 AM:
好东东,快全部发上来啊 |
|
楼上的知道我写这个做什么?
idlepc.txt的内容都是形如:c7200-ik9o3s-mz.123-17a.bin ======>>> 0x60729c0c 的
我的需求是:运行程序,
1.选择需要模拟的对象(通过,1.2.3.4.5.q选择)
1.1.检测当前目录下有没有IOS(格式为:xxxx.bin有则显示并赋值给iosname,没有显示空)
1.2.检测idlepc.txt有没有匹配的内容(如果有则显示该值并赋值给idlepc.没有显示空)
1.3.检测idelpc.txt的内容是否标准,并删除不标准的部分.
2.要求输入ios,并显示,改写iosname的值.需要检测ios是否符合xxx.bin,不符合重新输入,同时如果为空,要求重新输入
3,要求输入idlepc值,并显示.同时改写idlepc值.需要检测是否以0x开头,而且一共只有10位
4.将输入的iosname和idlepc值以iosname======>>>>idlepc的形式写入idlepc.txt
5.选择r1,r2,r3,r4.....符合选项继续,不符合,提示重新输入,还是返回开始菜单.
6,如果5成立.调用外部bat
7.由于外部bat,变化较大.暂时还没想到用什么方法尽可能使用变量,以增加灵活性.所以就没什么问题了
[ Last edited by yardian on 2006-10-20 at 09:34 ]
|
|
2006-10-20 09:13 |
|
|
yardian
中级用户
积分 305
发帖 85
注册 2005-5-23
状态 离线
|
|
2006-10-20 22:05 |
|
|
zerocq
中级用户
积分 458
发帖 196
注册 2006-10-5
状态 离线
|
『第
8 楼』:
测了一下下代码,好像代码是没写错
但楼主要注意一下代码分段可能效果好点
你说的那一段我运行也会出现你说的那种错误
================================================================================
echo 如果IOS检测正确请直接回车确认,否则
:reinput
set /p ciscoios=请直接将%name% IOS拖到本窗口:
echo ==============================================================================
if {%ciscoios%}=={} (
if {%ios%}=={} goto reinput
)
if not exist %ciscoios% goto reinput
rem 需要加入对%ciscoios%的验证:以bin结尾.但不知道如何写
我把:reinput上边加几个空行
rem这句去掉就没有问题了咯
不知道是什么原因:P
分段容易阅读,P处理可能效果也好点^_^
|
|
2006-10-21 01:52 |
|
|
yardian
中级用户
积分 305
发帖 85
注册 2005-5-23
状态 离线
|
『第
9 楼』:
嗯.是的.谢谢!去掉后是没问题了.
namejm版主呢?不是说可以精简吗?能不能帮忙精简一下?写这些代码已经费了很大劲.如果精简可是一点都不会的.麻烦你帮帮忙吧
|
|
2006-10-21 03:09 |
|
|
zerocq
中级用户
积分 458
发帖 196
注册 2006-10-5
状态 离线
|
『第
10 楼』:
直接看代码精简应该不容易哇
把用到的文本文件内容,各bin文件名列一些出来才方便精简咯
这里有一个地方可以
if {%cisco%}=={} goto begin
if /i %cisco%==1 goto getfilename
if /i %cisco%==2 goto getfilename
if /i %cisco%==3 goto getfilename
if /i %cisco%==4 goto getfilename
if /i %cisco%==5 goto getfilename
if /i %cisco%==q goto quit
直接改成
if {%cisco%}=={} goto begin
if /i %cisco%==1 set name =3620
if /i %cisco%==2 set name =3640
if /i %cisco%==3 set name =3660
if /i %cisco%==4 set name =7200
if /i %cisco%==5 set name =3840
if /i %cisco%==q goto quit
取消getfilename这一步:D
|
|
2006-10-21 04:33 |
|
|
yardian
中级用户
积分 305
发帖 85
注册 2005-5-23
状态 离线
|
『第
11 楼』:
谢谢,这一步真的是多余的
[ Last edited by yardian on 2006-10-21 at 05:06 ]
|
|
2006-10-21 04:57 |
|
|