找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 26589|回复: 11

[文本处理] 批处理怎样获取find命令所得特定字符串的整行?

[复制链接]
发表于 2012-6-30 10:19:16 | 显示全部楼层 |阅读模式
目的是获取1111.txt文件中含222的整个行,并把这行的所有字符串复制给str
  1. @echo off
  2. type "1111.txt"|find "222"
  3. for /f "delims=" %%i in ('type "1111.txt"|find "222"') do set str=%%i
  4. pause
复制代码
运行一闪拒消失了,应该是语法错误,但实在没看出哪出错了,各位前辈帮忙指正一下
 楼主| 发表于 2012-6-30 10:20:42 | 显示全部楼层
1111.txt测试文件为:
111111111
111222111
111111111
444444444
444667777
发表于 2012-6-30 11:08:26 | 显示全部楼层
特殊符号 | 未转义导致的错误划分

将:
  1. in ('type "1111.txt"|find "222"') do
复制代码
改为
  1. in ('type "1111.txt"^|find "222"') do
复制代码
  1. in ('find "222" "1111.txt"') do
复制代码
 楼主| 发表于 2012-6-30 11:52:47 | 显示全部楼层
回复 3# CrLf

非常感谢版主,批处理中的高人啊,俺的好些问题都是版主解决的,太感谢啦
 楼主| 发表于 2012-6-30 15:55:15 | 显示全部楼层
回复 3# CrLf


    版主能不能帮我解决下这个问题啊,http://bathome.l3.wuyou.com/thread-17853-1-1.html,特别感谢你
发表于 2012-6-30 15:57:37 | 显示全部楼层
回复 5# hehening88


    代码部分请加 [code],见版规:
3、请使用 code 标记把代码部分括起来(选中代码后,单击回复框的 <> 按钮),以便复制;
 楼主| 发表于 2012-7-1 15:34:36 | 显示全部楼层
回复 6# CrLf


    测试文本文件1111.txt内容如下:
111111111
111"222"111
111111111
444444444
fgjjllkugf
目的是将第二行双引号中的222替换成8888888
替换结果如下:
111111111
111"88888888"111
111111111
444444444
fgjjllkugf
批处理代码如下:
@echo off

setlocal enabledelayedexpansion

for /f "delims=" %%a in ('type "1111.txt"^|find /n "222"') do

set str=%%a

for /f tokens^=1-2*delims^=^" %%i in ("%str%") do (

  set substr=%%j

  set replace=888888888

  echo !substr!

  call set "str=%%str:!substr!=!replace!%%"

  echo !str!>>1111.txt

)
pause
但执行结果确实将解析替换好的字符串111"888888888"111写到了文件最后一行
怎么能让它写在第二行呢
 楼主| 发表于 2012-7-1 15:38:10 | 显示全部楼层
回复 6# CrLf
不好意思代码没按版规贴

@echo off
setlocal enabledelayedexpansion
for /f "delims=" %%a in ('type "1111.txt"^|find "222"') do set str=%%a
for /f tokens^=1-2*delims^=^" %%i in ("%str%") do (
  set substr=%%j
  rem set replace=world
  echo !substr!
  call set "str=%%str:!substr!=!replace!%%"
  echo !str!>>./httpd.conf
)
pause
 楼主| 发表于 2012-7-1 15:43:29 | 显示全部楼层
回复 6# CrLf

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%a in ('type "1111.txt"^|find "222"') do set str=%%a
  4. for /f tokens^=1-2*delims^=^" %%i in ("%str%") do (
  5.   set substr=%%j
  6.   set replace=world
  7.   echo !substr!
  8.   call set "str=%%str:!substr!=!replace!%%"
  9.   echo !str!
  10. )
  11. pause
复制代码
 楼主| 发表于 2012-7-1 15:50:23 | 显示全部楼层
回复 6# CrLf


    是不是因为type|find指令执行是对整个文本遍历,整个指令执行完后,就到了文本文件的末尾,所以我将处理完的字符串往文本文件中写的时候就写在了最后一行而不是,我找到的有“222”的第二行,但是不知道怎么改。
发表于 2012-7-1 16:07:50 | 显示全部楼层
回复 10# hehening88
你的代码第1个for的作用是将str设置成文本中最后一行包含"222"的,第2个for起的作用仅仅是把str的内容按照你的想法进行了替换并显示,之前你用的文本追加符">>",所以被替换这一行会到最后去。
那么你想达到什么样的效果呢?
 楼主| 发表于 2012-7-1 17:08:47 | 显示全部楼层
回复 11# weichenxiehou


    我想达到的效果是这样的:
    测试文本文件1111.txt内容如下:
111111111
111"222"111
111111111
444444444
fgjjllkugf
目的是将第二行双引号中的222替换成8888888
替换结果如下:
111111111
111"88888888"111
111111111
444444444
fgjjllkugf
这只是个测试文本
我用特殊字符通过find命令找到含特殊字符的行,然后找到该行双引号中的字符串用其他字符串替换掉;
我发现执行晚find命令后,文件就已经到达结尾,不会像
for /f "delims=" %%a in (11.txt) do这样的语句是逐行执行的。有没有QQ,想请教你这方面的,我得是490299310
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-19 06:15 , Processed in 0.011362 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表