Board logo

标题: [特效代码] [已解决]批处理如何查找文本中含有指定字符串nnf的行并输出到新的文本 [打印本页]

作者: ohar    时间: 2009-7-31 11:08     标题: [已解决]批处理如何查找文本中含有指定字符串nnf的行并输出到新的文本

本帖最后由 pcl_test 于 2016-8-4 13:31 编辑

我想查找123.txt中含有字符nnf的行,并设置为变量,输出到112.txt
123.txt内容是
(nnf= 0.12 ;)
qwe 021
dsagggggggggggaga
(nnf= -452.2 ;)
ffffddd
(nnf= -0.15 ;)
2454253543543

我的代码
  1. for /f %%i in ('type 123.txt^|findstr /i "nnf"') do set o=%%i
  2. set o=%i:* =%
  3. set o=%i:~5,-2%
  4. echo %o%>>112.txt
复制代码
执行到第二行就有问题了,因为在查找行中含有空格
我想要的是结果是,112.txt内容为
0.12
-452.2
-0.15

请各位帮帮忙
作者: inittab    时间: 2009-7-31 11:28

(nnf= 0.12 ;) 这行格式都相同吗 如是就简单了

for /f "tokens=2" %%i in ('type 123.txt^|findstr /i "nnf"') do echo %%i>>112.txt
作者: ohar    时间: 2009-7-31 11:48     标题: 回复 2楼 的帖子

恩,就是这样
不知道 "tokens=2" 是什么意思
如果我想将寻找到的第1个值输入到1.txt ,第2个值输入到a.txt
,第3个值输入到q.txt
又该怎样改呢
谢谢回复
作者: Lumiere    时间: 2009-7-31 11:51     标题: 回复 3楼 的帖子

你要输入到的目标文本名字没有规律的么,东一个西一个的话就只等逐条重定向。没多大意义。
作者: inittab    时间: 2009-7-31 12:08

完整应该如下:
for /f "tokens=2 delims= " 以空格为分隔符,输出第二列。 空格为分隔时可省略delims=  。这样就把第一列nnf= 和第三列 ;过滤掉,只取第二列数字部分赋给%%i 。

如果每个变量值输出到不同文件。要批处理的话,这些文件必须要有一定的规律,否则只有手动处理或最机械的办法。如下例可供你参考一下。
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "tokens=2" %%i in ('type 123.txt^|findstr /i "nnf"') do (
  3. set /a n+=1
  4. echo;%%i>>a!n!.txt
  5. )
  6. pause
复制代码
它将把第一个输出到a1.txt ,第二个输出到a2.txt 依次类推。如果没规律可循也可以加if 判断(笨办法)
if !n! equ 1 echo;%%i 第一个值处理
if !n! equ 2 echo;%%i 第二个值处理
..
由你的意图来决定代码
作者: ohar    时间: 2009-8-1 10:50     标题: 真诚感谢两位的回贴

我已知道 tokens delims 的大概用法了
又有了新贴http://bbs.bathome.net/viewthread.php?tid=5413&extra=page%3D1&frombbs=1




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2