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

回复 4楼 的帖子

set命令不能直接将等号=替换为其它字符,但是可以将其它字符替换为等号=。以下为正确代码,生成的b.txt供理解上参考,c.txt为最终文件,将其改名为原始目标文件就号。
  1. @echo off&setlocal enabledelayedexpansion
  2. call :replace
  3. for /f "delims=" %%a in (b.txt) do (
  4.       set var=%%a
  5.       set var=!var:鸡%char%7=鸡%char%七!&echo !var:%char%==!>>c.txt
  6. )
  7. pause&goto :eof 2>nul
  8. :replace
  9. set /p char=请输入一个文本中不包含的字符:
  10. find /i "%char%" a.txt>nul&&goto replace
  11. for /f "tokens=1* delims==" %%a in (a.txt) do (
  12.     set temp=%%a%char%%%b
  13.     call :loop
  14. )
  15. goto :eof 2>nul
  16. :loop
  17. for /f "tokens=1* delims==" %%m in ("!temp!") do (
  18.         set temp=%%m%char%%%n
  19.         if not "%%n"=="" (goto loop) else echo !temp:~0,-1!>>b.txt
  20. )
复制代码

PS:输入的时候不要输入批处理的某些特殊运算符,如^,!,%之类的,负责会出错,如果一定要输的话,那先将他们转义,比如^,&,&&,|等,但是!和%因为是变量组成部分,扩展以后会将命令语句的语法打乱,所以不能用,实在找不到文本中未出现的字符的话,也可以字符串,不过前提一定要尽可能是奇怪的长的组合,因为文本中比如有sdsd这样的字符串,而且此字串正好在=的前面,但是没有dsdd这样的字串,如果输入dsdd的话,虽然文本中没有,可以通过第一轮的findstr,但是两个字串连在一起的时候就变成了s dsdd sdd这样后来将原本的=号重新替换回来的时候将在第一个dsdd部分替换,而不是后来的sdsd dsdd,这样结果就变了,这样的情况需要在替换字符串以后再用findstr过滤一次。在此就不添加%,!还有替换字符串后重新过滤的代码了,因为比较好实现,自己琢磨吧。

[ 本帖最后由 Lumiere 于 2009-7-28 14:06 编辑 ]
Still with wax

TOP

回复 10楼 的帖子

这些第三方命令行工具都是谁写的啊?是你们自己么?
Still with wax

TOP

回复 12楼 的帖子

让我羡慕到嫉妒啊……
Still with wax

TOP

回复 14楼 的帖子

tireless毕竟是上校啊,佩服,从整个要替换的字符串“鸡=7”着手替换,清晰明了。而我就太专注于将=替换为别的字符了。学习了……
还有啊,我觉得你这句“ set var=!var:"=[[q]]!”还是有疏漏的,万一文本中有字符串[[q]]咋办?我觉得输入一个单一字符然后用一个findstr过滤一下文本还是有必要的。不怕一万只怕万一。编程要的就是严谨。
再次学习了……
Still with wax

TOP

返回列表