[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

目的是获取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
复制代码
运行一闪拒消失了,应该是语法错误,但实在没看出哪出错了,各位前辈帮忙指正一下

1111.txt测试文件为:
111111111
111222111
111111111
444444444
444667777

TOP

特殊符号 | 未转义导致的错误划分

将:
  1. in ('type "1111.txt"|find "222"') do
复制代码
改为
  1. in ('type "1111.txt"^|find "222"') do
复制代码
  1. in ('find "222" "1111.txt"') do
复制代码

TOP

回复 3# CrLf

非常感谢版主,批处理中的高人啊,俺的好些问题都是版主解决的,太感谢啦

TOP

回复 3# CrLf


    版主能不能帮我解决下这个问题啊,http://bathome.l3.wuyou.com/thread-17853-1-1.html,特别感谢你

TOP

回复 5# hehening88


    代码部分请加 [code],见版规:
3、请使用 code 标记把代码部分括起来(选中代码后,单击回复框的 <> 按钮),以便复制;

TOP

回复 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写到了文件最后一行
怎么能让它写在第二行呢

TOP

回复 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

TOP

回复 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
复制代码

TOP

回复 6# CrLf


    是不是因为type|find指令执行是对整个文本遍历,整个指令执行完后,就到了文本文件的末尾,所以我将处理完的字符串往文本文件中写的时候就写在了最后一行而不是,我找到的有“222”的第二行,但是不知道怎么改。

TOP

回复 10# hehening88
你的代码第1个for的作用是将str设置成文本中最后一行包含"222"的,第2个for起的作用仅仅是把str的内容按照你的想法进行了替换并显示,之前你用的文本追加符">>",所以被替换这一行会到最后去。
那么你想达到什么样的效果呢?
看得多说得多,远比不上写得多。

TOP

回复 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

TOP

返回列表