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

[文本处理] 如何用批处理替换整个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子函数也不行~现在只有求助大神们了,求给个解决代码,好吗?

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

TOP

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

回复 6# gwsbhqt


    看看这个对你有帮助否?
http://hi.baidu.com/yjc0407/item/9e100bf4bbee71c5a835a2aa
学习中

TOP

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

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

做到上述,我认为才能叫优秀.优秀不是吹的,谁个代码能比我这 [更简单直观?] show出来呀
脚本是写给人看的,是写给用户看的,而不是写给机子看的
用户能看懂、会修改的脚本,才是好脚本。
写易懂的powershell脚本帮人解决问题,进而让用户学会自渔,吾所愿也

TOP

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

TOP

回复 4# gwsbhqt


    call 可以调用被扩展了的变量,变量要用双百分号对括起来。
我也只知这么多了 ^_^
学习中

TOP

标题

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

求解答!新人来的,请多多包含~~~~

TOP

标题

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

TOP

  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
感叹号倒是替换过来了,斜杠又被换回去了,分开测试还行,合起来就这样了。
疑惑?? 求解??
学习中

TOP

返回列表