标题: [文本处理] 批处理怎样获取find命令所得特定字符串的整行? [打印本页]
作者: hehening88 时间: 2012-6-30 10:19 标题: 批处理怎样获取find命令所得特定字符串的整行?
目的是获取1111.txt文件中含222的整个行,并把这行的所有字符串复制给str- @echo off
- type "1111.txt"|find "222"
- for /f "delims=" %%i in ('type "1111.txt"|find "222"') do set str=%%i
- pause
复制代码
运行一闪拒消失了,应该是语法错误,但实在没看出哪出错了,各位前辈帮忙指正一下
作者: hehening88 时间: 2012-6-30 10:20
1111.txt测试文件为:
111111111
111222111
111111111
444444444
444667777
作者: CrLf 时间: 2012-6-30 11:08
特殊符号 | 未转义导致的错误划分
将:- in ('type "1111.txt"|find "222"') do
复制代码
改为- in ('type "1111.txt"^|find "222"') do
复制代码
或- in ('find "222" "1111.txt"') do
复制代码
作者: hehening88 时间: 2012-6-30 11:52
回复 3# CrLf
非常感谢版主,批处理中的高人啊,俺的好些问题都是版主解决的,太感谢啦
作者: hehening88 时间: 2012-6-30 15:55
回复 3# CrLf
版主能不能帮我解决下这个问题啊,http://bathome.l3.wuyou.com/thread-17853-1-1.html,特别感谢你
作者: CrLf 时间: 2012-6-30 15:57
回复 5# hehening88
代码部分请加 [code],见版规:
3、请使用 code 标记把代码部分括起来(选中代码后,单击回复框的 <> 按钮),以便复制;
作者: hehening88 时间: 2012-7-1 15:34
回复 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写到了文件最后一行
怎么能让它写在第二行呢
作者: hehening88 时间: 2012-7-1 15:38
回复 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
作者: hehening88 时间: 2012-7-1 15:43
回复 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
- set replace=world
- echo !substr!
- call set "str=%%str:!substr!=!replace!%%"
- echo !str!
- )
- pause
复制代码
作者: hehening88 时间: 2012-7-1 15:50
回复 6# CrLf
是不是因为type|find指令执行是对整个文本遍历,整个指令执行完后,就到了文本文件的末尾,所以我将处理完的字符串往文本文件中写的时候就写在了最后一行而不是,我找到的有“222”的第二行,但是不知道怎么改。
作者: weichenxiehou 时间: 2012-7-1 16:07
回复 10# hehening88
你的代码第1个for的作用是将str设置成文本中最后一行包含"222"的,第2个for起的作用仅仅是把str的内容按照你的想法进行了替换并显示,之前你用的文本追加符">>",所以被替换这一行会到最后去。
那么你想达到什么样的效果呢?
作者: hehening88 时间: 2012-7-1 17:08
回复 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
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |