标题: [文本处理] 批处理怎样替换特殊字符文本? [打印本页]
作者: wuhanbin 时间: 2011-2-17 16:11 标题: 批处理怎样替换特殊字符文本?
一个文本文件如下,现在要把其中的测试换成test,试过一些文本替换的代码,无法正确处理空行和特殊符号!(显示ECHO 处于打开状态。),请大侠前来帮忙,谢过!
!
!!
!!!
测试
作者: wuhanbin 时间: 2011-2-17 16:16
上面文本文件发错了,文件中的感叹号为英文格式的,正确的文本文件如下:
!
!!
!!!
测试
[ 本帖最后由 wuhanbin 于 2011-2-17 16:17 编辑 ]
作者: wuhanbin 时间: 2011-2-17 16:17
!
!!
!!!
测试
作者: CrLf 时间: 2011-2-17 17:32
- @echo off
- for /f "tokens=1* delims=:" %%a in ('findstr /n .* 1.txt') do set tmp=%%b&call echo %%tmp:测试=test%%
- pause
复制代码
作者: CrLf 时间: 2011-2-17 17:34
- @echo off
- for /f "tokens=1* delims=:" %%a in ('findstr /n .* 1.txt') do (
- set tmp=%%b
- setlocal enabledelayedexpansion
- echo !tmp:测试=test!
- endlocal
- )
- pause
复制代码
作者: wuhanbin 时间: 2011-2-17 18:08
我试了一下楼上的代码,输出的结果是
!
测试=test
!!
测试=test
!!!
测试=test
test
而我想要的结过是:
!
!!
!!!
test
望各位大大帮帮小弟,谢谢啦!
作者: CrLf 时间: 2011-2-17 18:17
哦...- @echo off
- for /f "delims=" %%a in ('findstr /n .* 1.txt') do (
- set tmp=%%a
- setlocal enabledelayedexpansion
- for /f "tokens=1* delims=:" %%b in ("!tmp:测试=test!") do echo %%c
- endlocal
- )
- pause
复制代码
作者: wuhanbin 时间: 2011-2-17 18:35
这下结过变成以下内容了, !符号和空行都不见了,5555555555.
ECHO 处于关闭状态。
ECHO 处于关闭状态。
ECHO 处于关闭状态。
ECHO 处于关闭状态。
ECHO 处于关闭状态。
ECHO 处于关闭状态。
test
作者: netbenton 时间: 2011-2-17 19:02
5楼 的思路是正确的,只差处理空行问题而已
以下代码除了文本是以 冒号和分号 开头会出错外,其它文本字符应该不会有问题了- @echo off
- for /f "tokens=*" %%a in ('findstr /n .* 1.txt') do (
- set tmp=%%a
- setlocal enabledelayedexpansion
- set tmp=!tmp:测试=test!
-
- rem 把 冒号 前的丢掉
- echo;!tmp:*:=!
-
- endlocal
- )
- pause
复制代码
作者: wuhanbin 时间: 2011-2-17 19:11
太感谢了!代码可以用!
作者: CrLf 时间: 2011-2-17 19:22
分号的问题可以用eol=
变量替换的技巧学习下,以前没见过,一直用%m:x*=%总是会出错就以为变量替换不支持通配,原来是这样用,竟然和findstr的语法完全相反
[ 本帖最后由 zm900612 于 2011-2-17 19:26 编辑 ]
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |