中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 关于find出来的字符串后面的回车,
作者:
标题: 关于find出来的字符串后面的回车, 上一主题 | 下一主题
szweiw
新手上路





积分 18
发帖 18
注册 2009-7-27
状态 离线
『楼 主』:  关于find出来的字符串后面的回车,

小弟写了一个判断本机IP是否在txt文件列表里面的批处理,代码如下:
@for /f "tokens=15" %%i in (' ipconfig ^| find "IP Address" ') do (
    @for /f %%j in (c:\ht.txt) do (
@echo i= %%i
@echo j= %%j
        @if %%i==%%j (
                goto :yes
        )
    )
    goto :no
)
@goto :eof


:yes
@echo yes+++++++++++
@goto :eof


:no
@echo no----------
@goto :eof
总是无法达到想要的效果,即使我在ht.txt里面写的就是本机IP,也无法执行:yes里面的语句。执行结果如下。

C:\>a

C:\>(

goto :no
)

C:\>(



)
i= 10.10.37.186
j= 10.10.37.186
no----------

C:\>



我怀疑是find出来的本机IP (%%i变量) 后面带了个回车,导致比对的时候判断失败。请教有没有什么办法去掉后面的回车来进行比对?
另外用goto语句跳转,有没有办法带个参数,类似 call :yes %%i 这样?

[ Last edited by szweiw on 2009-9-7 at 06:19 ]

2009-9-7 06:16
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Hanyeguxing
银牌会员

正在学习中的菜鸟...


积分 1039
发帖 897
注册 2009-3-1
来自 在地狱中仰望天堂
状态 离线
『第 2 楼』:  

首先,运行这个批处理:
@echo off
for /f "tokens=15" %%i in (' ipconfig ^| find "IP Address" ') do >hanye.txt echo %%ihanye
在hanye.txt里的ip 地址后面与hanye之间的就是回车符,复制“回车符”和后面的hanye,然后在ht.txt文本里,每个ip的后面粘贴。
当然,你也可以通过edit获得回车符:ctrl+p切换进入,ctrl+m获得的就是回车符
批处理还用原来的:
@echo off
for /f "tokens=15" %%i in (' ipconfig ^| find "IP Address" ') do for /f %%j in (c:\ht.txt) do (
echo i= %%ihanye
echo j= %%j
if "%%ihanye" == "%%j" (echo yes+++++++++++) else echo no----------
)
pause
goto 的时候,还是在原批处理中,所以不存在带不带着,因为变量本来就都在。。。

[ Last edited by Hanyeguxing on 2009-9-7 at 07:54 ]



批处理之家 http://bbs.bathome.net/forum-5-1.html
2009-9-7 07:15
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
tireless
银牌会员





积分 2025
发帖 1122
注册 2007-9-5
状态 离线
『第 3 楼』:  

ipconfig 输出的结果里行尾都是“<回车符><回车符><换行符>”,正常的行尾是“<回车符><换行符>”。
@echo off
for /f "tokens=15" %%i in (' ipconfig ^| find "IP Address" ') do set ip=%%i
set /p ht=<ht.txt
echo %ip%
echo %ht%
if %ip%==%ht% (echo yes+++++++++++) else echo no----------
pause


2009-9-7 07:49
查看资料  发短消息 网志   编辑帖子  回复  引用回复
szweiw
新手上路





积分 18
发帖 18
注册 2009-7-27
状态 离线
『第 4 楼』:  



  Quote:
Originally posted by Hanyeguxing at 2009-9-7 07:15:
首先,运行这个批处理:
@echo off
for /f "tokens=15" %%i in (' ipconfig ^| find "IP Address" ') do >hanye.txt echo %%ihanye
在hanye.txt里的ip 地 ...

在ht.txt里面把回车符/换行符手工生成出来,刚才我试了一下,是可以的。

我原来的设计是要在:yes 和 :no 里面再分别执行一批命令,所以开始想用 call :yes %%i 的方式调用,这样可以把 %%i 传到:yes过程里面去,但这样的话又没法跳出循环,所以想到用goto,但用了goto跳出循环之后好像就没法带参数了。

[ Last edited by szweiw on 2009-9-7 at 08:26 ]

2009-9-7 08:16
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
szweiw
新手上路





积分 18
发帖 18
注册 2009-7-27
状态 离线
『第 5 楼』:  



  Quote:
Originally posted by tireless at 2009-9-7 07:49:
ipconfig 输出的结果里行尾都是“<回车符><回车符><换行符>”,正常的行尾是“<回车符><换行符>”。

[code]@echo off
for /f "tok ...

多谢回复。
我试过你的代码,当ht.txt里面只有一行IP数据的时候是可以正确执行的,但当有多行数据的时候,可能set /p ht=<ht.txt只能读出第一行数据,所以就没有正确执行了。

也是我前面没有说清楚,我的设计是ht.txt里有一批IP,逐行读出,如果本机在这个列表里面的话,执行一串命令;如果没有在这个列表中,就去执行另外一串命令。

2009-9-7 08:22
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
szweiw
新手上路





积分 18
发帖 18
注册 2009-7-27
状态 离线
『第 6 楼』:  

综合两位的帮助来看,这样好像是可以的,明天回公司再仔细测测
@for /f "tokens=15" %%i in (' ipconfig ^| find "IP Address" ') do @echo %%i>c:\ip.txt
@set/p ip=<c:\ip.txt
@del c:\ip.txt
@for /f %%j in (c:\ht.txt) do (
    @if %ip%==%%j (
            @goto :yes
    )
)
@goto :no
@goto :eof


:yes
@echo yes+++++++++++ %ip%
@goto :eof


:no
@echo no---------- %ip%
@goto :eof
[ Last edited by szweiw on 2009-9-7 at 12:09 ]

2009-9-7 08:29
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: