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

[文本处理] 批处理怎样替换特殊字符文本?

一个文本文件如下,现在要把其中的测试换成test,试过一些文本替换的代码,无法正确处理空行和特殊符号!(显示ECHO 处于打开状态。),请大侠前来帮忙,谢过!


!!

!!!

测试

上面文本文件发错了,文件中的感叹号为英文格式的,正确的文本文件如下:
!

!!

!!!
测试

[ 本帖最后由 wuhanbin 于 2011-2-17 16:17 编辑 ]

TOP

!

!!

!!!
测试

TOP

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

TOP

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

TOP

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

!!

!!!

test
望各位大大帮帮小弟,谢谢啦!

TOP

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

TOP

这下结过变成以下内容了, !符号和空行都不见了,5555555555.
ECHO 处于关闭状态。
ECHO 处于关闭状态。
ECHO 处于关闭状态。
ECHO 处于关闭状态。
ECHO 处于关闭状态。
ECHO 处于关闭状态。
test

TOP

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

TOP

太感谢了!代码可以用!

TOP

分号的问题可以用eol=
变量替换的技巧学习下,以前没见过,一直用%m:x*=%总是会出错就以为变量替换不支持通配,原来是这样用,竟然和findstr的语法完全相反

[ 本帖最后由 zm900612 于 2011-2-17 19:26 编辑 ]

TOP

返回列表