Board logo

标题: [文本处理] 如何用批处理替换整个txt的半角感叹号!为^! [打印本页]

作者: gwsbhqt    时间: 2013-12-12 07:46     标题: 如何用批处理替换整个txt的半角感叹号!为^!

是这样的,最近在写个文本文件字符处理的批处理,想将指定文本文件中的所有特殊符号全部转为带转义字符的,比如
/转为^/
于是写出来这样不完善的东西
  1. setlocal enablexxxxxxxsion
  2. for /f "delims=" %%i in (source.txt) do (
  3.      set code=%%i
  4.      set code=!code:^/=^^^/!
  5.      rem 这里省略其他字符的处理,关键是下面这句根本不起作用!
  6.      set code=!code:^^^!=^^^^^!!
  7.      echo !code!>>test.txt
  8. )
复制代码
我知道不起作用的原因,就是变量延迟中不能用感叹号,可是在for中不能不开变量延迟啊,而且其他人说的用call子函数也不行~现在只有求助大神们了,求给个解决代码,好吗?
作者: battab    时间: 2013-12-12 11:09

  1. @echo off
  2. for /f "delims=" %%i in (1.txt) do (
  3.      set code=%%i
  4.      call set code=%%code:^/=^^^^/%%
  5.      call set code=%%code:^!=^^^^!%%
  6.      call call echo %%%%code%%%%>>2.txt     
  7. )
复制代码
回复 1# gwsbhqt
感叹号倒是替换过来了,斜杠又被换回去了,分开测试还行,合起来就这样了。
疑惑?? 求解??
作者: gwsbhqt    时间: 2013-12-12 14:41     标题: 标题

回复 2# battab
    说实话,这问题要解决不会特别难,只要绕个湾借用一下vbs就能解决。可是按要求只用批处理解决就很困难了。。。
我已经重新写了一个用vbs 替换的批处理函数。。问题是解决了,可是,问题是IO 特别大。。。
本来我觉得批处理可以完成的一句最多IO 为2,用了vbs 后,同效果IO 大了十倍达到了10多。。。
想求批处理下的实际可行的解决方法。。。
话说你怎么在for 中不用变量延迟。。。怎么可以?不报错吗??
作者: gwsbhqt    时间: 2013-12-12 14:49     标题: 标题

回复 2# battab
    话说你写的是什么意思?可以详细讲解一下吗。?拜托了~~~
1,for 中怎么可能不用变量延迟,预处理不出错?
2,那个call 怎么会这样用?
3,为何用4个转义字符?
4,最后一句为何call 两次?

求解答!新人来的,请多多包含~~~~
作者: battab    时间: 2013-12-12 20:53

回复 4# gwsbhqt


    call 可以调用被扩展了的变量,变量要用双百分号对括起来。
我也只知这么多了 ^_^
作者: gwsbhqt    时间: 2013-12-13 07:16

回复 5# battab
    不是啊,你的代码在我机器XP 上没有达到预订,生成的空2.txt ,求解!
另外。你的意思是用call 和%%ver%%搭配可以做到!ver!的效果?求详解!!!!
作者: PowerShell    时间: 2013-12-13 10:58

本帖最后由 PowerShell 于 2013-12-13 15:59 编辑

试试这句powershell代码,分别替换[!]和[/],我未测试,
  1. Get-Content a.txt |ForEach-Object { $_ -replace "!","^!" ;  $_ -replace "/","^/"  } | out-file b.txt
复制代码
脚本是写给人看的,是写给用户看的,而不是写给机子看的
用户能看懂、会自己修改的脚本,才是好脚本。

做到上述,我认为才能叫优秀.优秀不是吹的,谁个代码能比我这 [更简单直观?] show出来呀
作者: battab    时间: 2013-12-13 11:06

本帖最后由 battab 于 2013-12-13 11:10 编辑

回复 6# gwsbhqt


    看看这个对你有帮助否?
http://hi.baidu.com/yjc0407/item/9e100bf4bbee71c5a835a2aa
作者: asnahu    时间: 2013-12-13 11:27

有sed、awk等这么优秀的软件不用,为什么要纠结于批处理的软肋。




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2