Board logo

标题: 请教:如何在txt中搜索特定的字符串 [打印本页]

作者: malongxa     时间: 2005-11-9 15:03    标题: 请教:如何在txt中搜索特定的字符串

如果在xp/2003/2000的dos中有一个文本as.txt内容为( Pinging www.cctv.chinacache.net [218.30.70.56] with 32 bytes of data,我如何提取[后和]前的ip部分,注IP为可变数字,然后将此IP>>到另一个txt,谢谢!
作者: bush     时间: 2005-11-9 16:17    标题: 你可以看一下find命令

我没xp
如果是我在dos下,我会按‘[’和‘]‘把文字截断比如:
Pinging www.cctv.chinacache.net [
218.30.70.56]
with 32 bytes of data

然后提取含‘]‘的行就是了
作者: willsort     时间: 2005-11-9 17:40
Re malongxa:

      试试在命令行运行以下命令试试看,如果可行再告诉你具体的要求,然后我可以尝试给出更完整健壮的方案。

for /f "delims=[] tokens=2" %i in (as.txt) do echo.%i>>Result.txt
作者: malongxa     时间: 2005-11-10 09:26
版主你太强了,我用你的方法for /f "delims=[] tokens=2" %i in (as.txt) do echo.%i>>temp得到了我要得结果,而且使我学到了东西,谢谢,再次感谢!!!
作者: malongxa     时间: 2005-11-10 10:38
版主我想首先ping  xxx.com 在得出的结果里找到ip(yyy.yyy.yyy.yyy),在将这个作为另外一个命令ping的执行参数如ping  yyy.yyy.yyy.yyy,因为我用的是动态IP所以每次IP变了后,都会很麻烦,我想学着自己编批处理,可是很多参数都不明白,希望能向版主多多学习,谢谢!!
作者: malongxa     时间: 2005-11-10 15:25
我编的批处理cctv.bat
ping www.cctv.com >as.txt
for /f "delims=[] token=2" %i in (as.txt) do ping %i
单独执行每行都行,可是合起来执行就不行了,请指点,谢谢!
作者: willsort     时间: 2005-11-10 19:51
Re malongxa:

      在批处理文件中使用 for 语句时,其中的替代变量必须用双百分号做前导,即%i应改为%%i,这源于在批处理和命令行中解析代码行所存在的差异性。

      另外,这两句代码可以尝试用一句实现,仍然给出命令行下的方案:

      for /f "delims=[] token=2" %i in ('ping www.cctv.com') do ping %i
作者: bush     时间: 2005-11-10 22:22
可惜dos/98下都不能使用那麽多的for參數~
作者: malongxa     时间: 2005-11-11 10:18
谢谢版主帮助,我还想进一步完善我的想法,假设我现有一个文本as.txt
Alternate TCP addresses for

Local Address         Alternate Address
--------------------  --------------------
Default               219.137.124.26
我要取文本中的IP即(219.137.124.26)
将这个IP和ping www.cctv.com里取得的IP相比较
如果IP相同则无动作
如果IP不同则执行
for /f "delims=[] token=2" %i in ('ping www.cctv.com') do ping %i,
再次感谢版主指点

[ Last edited by malongxa on 2005-11-11 at 14:28 ]
作者: malongxa     时间: 2005-11-11 14:34
我已经可以提取AS.TXT中的IP了
用for /f "delims=ault tokens=2" %i in (as.txt) do echo %i
可是提取的IP前含有空格
现在是不知道如何比较和判断这个IP和ping www.cctv.com里提取IP的不同
请指点,谢谢!
作者: 无奈何     时间: 2005-11-12 00:55


  Quote:
用for /f "delims=ault tokens=2" %i in (as.txt) do echo %i
可是提取的IP前含有空格

换个顺序,这样:
for /f "tokens=2 delims= " %i in (as.txt) do echo %i

我实在不知道你最终想干什么,下面是你第 9 楼要得功能。
存为批文件执行。
for /f "tokens=2 delims=[]" %%i in ('ping www.cctv.com') do set a=%%i
for /f "tokens=2 delims= " %%i in (as.txt) do set b=%%i
if "%a%" NEQ "%b%" for /f "tokens=2 delims=[]" %%i in ('ping www.cctv.com') do ping %%i

作者: malongxa     时间: 2005-11-13 00:28
谢谢你无奈何,我按你的指点测试了下成功了,如果我还是以a,b为判断条件接着执行命令,那我是否可以在你的批处理后加上
if "%a%" NEQ "%b%" ping www.cctv.com
还是直接在if "%a%" NEQ "%b%" for /f "tokens=2 delims=[]" %%i in ('ping www.cctv.com') do ping %%i 后加ping www.cctv.com
写成if "%a%" NEQ "%b%" for /f "tokens=2 delims=[]" %%i in ('ping www.cctv.com') do ping %%i ping www.cctv.com
再次感谢!
作者: 无奈何     时间: 2005-11-13 00:43
if ... 后直接跟你要执行的语句就行了。
如果多条语句可以用 & 连接
例:
if "%a%" NEQ "%b%" dir
if "%a%" NEQ "%b%" dir & echo OK
作者: zzhynxxn     时间: 2005-11-14 11:07
如果我想从一个文本中任意取值,我该怎么做。谢谢!!!
比如有个文本a.txt,内容如下:
Local Address         Alternate Address
我要取其中的“nate”,我该怎么做
作者: malongxa     时间: 2005-11-14 22:10
能否请版主和无奈何两位高手详细介绍一下"delims=[] token=2"的用法,我还是没办法抓取特定的字符,再次谢谢两位高手!!
作者: zreo     时间: 2005-11-14 23:57


  Quote:
if "%a%" NEQ " ...

我想请问一下,这里为什么一定要 %a% 而只有一个%号就不行。还有这里的NEQ是代表着什么意思。
作者: 无奈何     时间: 2005-11-15 00:31


  Quote:
Originally posted by malongxa at 2005-11-14 22:10:
能否请版主和无奈何两位高手详细介绍一下"delims=[] token=2"的用法,我还是没办法抓取特定的字符,再次谢谢两位高手!!

delims=[]  是以 [ 与 ] 作为分隔符拆分文本,token=2 从第二列开始算起。
详情见 for /?

  Quote:
我想请问一下,这里为什么一定要 %a% 而只有一个%号就不行。还有这里的NEQ是代表着什么意思。

%a%是环境变量,而不是循环变量。
NEQ 详见:if /?
作者: willsort     时间: 2005-11-15 09:12
Re malongxa:

      在 NT CMD 下“抓取”特定字符(串)有两种方式:一是利用 for /f 分析字符串的前后界限的特征,适合于提取位于空格或某些特殊字符之间的单词或字符串;二是利用 set 分析字符串的行列位置,适合于提取已知位置的字符串。

      你所说的提取 “nate”,并没有考虑到以何种方式提取,是位于 28-32 列的字符串,还是位于 Alter 后空格之前的字符串,这决定了实现方式的不同。

[ Last edited by willsort on 2005-11-17 at 18:04 ]
作者: malongxa     时间: 2005-11-16 10:41
感谢版主指导,我想两种方法都学习,请给我解决方法好吗?,再次感谢版主指导.
作者: Climbing     时间: 2005-11-17 03:45
不要让人指导了,已经指导的很详细了,看一下这三个命令的结果,仔细看,慢慢试:
for /?
if /?
set /?

只有自己试出来的东西才是真正属于自己的,同一个命令重复了N次你仍然不理解,原因正在于这是别人告诉你的。
作者: malongxa     时间: 2005-11-17 09:23
to:Climbing
   你好!对于这三个命令,我第一贴的目的已经达到,因为我想举一反三更深一步学习这三个命令,我也自己测试了好多次,正是因为我有些不明白/?里的用法,所以才请版主把他的方法举出,我好学习,请不要认为我是个不努力的人,再次感谢版主和无奈何!