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