Board logo

标题: [文本处理] 批处理怎样替换特殊字符文本? [打印本页]

作者: 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

  1. @echo off
  2. for /f "tokens=1* delims=:" %%a in ('findstr /n .* 1.txt') do set tmp=%%b&call echo %%tmp:测试=test%%
  3. pause
复制代码

作者: CrLf    时间: 2011-2-17 17:34

  1. @echo off
  2. for /f "tokens=1* delims=:" %%a in ('findstr /n .* 1.txt') do (
  3. set tmp=%%b
  4. setlocal enabledelayedexpansion
  5. echo !tmp:测试=test!
  6. endlocal
  7. )
  8. pause
复制代码

作者: wuhanbin    时间: 2011-2-17 18:08

我试了一下楼上的代码,输出的结果是
!
测试=test
!!
测试=test
!!!
测试=test
test
而我想要的结过是:
!

!!

!!!

test
望各位大大帮帮小弟,谢谢啦!
作者: CrLf    时间: 2011-2-17 18:17

哦...
  1. @echo off
  2. for /f "delims=" %%a in ('findstr /n .* 1.txt') do (
  3. set tmp=%%a
  4. setlocal enabledelayedexpansion
  5. for /f "tokens=1* delims=:" %%b in ("!tmp:测试=test!") do echo %%c
  6. endlocal
  7. )
  8. pause
复制代码

作者: wuhanbin    时间: 2011-2-17 18:35

这下结过变成以下内容了, !符号和空行都不见了,5555555555.
ECHO 处于关闭状态。
ECHO 处于关闭状态。
ECHO 处于关闭状态。
ECHO 处于关闭状态。
ECHO 处于关闭状态。
ECHO 处于关闭状态。
test
作者: netbenton    时间: 2011-2-17 19:02

5楼 的思路是正确的,只差处理空行问题而已
以下代码除了文本是以 冒号和分号 开头会出错外,其它文本字符应该不会有问题了
  1. @echo off
  2. for /f "tokens=*" %%a in ('findstr /n .* 1.txt') do (
  3. set tmp=%%a
  4. setlocal enabledelayedexpansion
  5. set tmp=!tmp:测试=test!
  6. rem 把 冒号 前的丢掉
  7. echo;!tmp:*:=!
  8. endlocal
  9. )
  10. 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