标题: 关于find出来的字符串后面的回车,
[打印本页]
作者: szweiw
时间: 2009-9-7 06:16
标题: 关于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 ]
作者: Hanyeguxing
时间: 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 地址后面与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 ]
作者: tireless
时间: 2009-9-7 07:49
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
作者: szweiw
时间: 2009-9-7 08:16
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 ]
作者: szweiw
时间: 2009-9-7 08:22
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,逐行读出,如果本机在这个列表里面的话,执行一串命令;如果没有在这个列表中,就去执行另外一串命令。
作者: szweiw
时间: 2009-9-7 08:29
综合两位的帮助来看,这样好像是可以的,明天回公司再仔细测测
@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 ]