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

批处理怎样替换包含等号的字符串?

1.txt中文本内容:
文本="刘姓" 动作="打开外部PDF文档" 页码="6"

现想将其中的“动作="打开外部PDF文档"”这几个字符串替换掉,写批处理如下:
  1. @echo off
  2. set a=动作="打开外部PDF文档"
  3. setlocal enabledelayedexpansion
  4. for /f "delims=" %%i in (1.txt) do (set str=%%i
  5. set str1=!str:%a%=!
  6. echo !str1! >>fix.txt
  7. )
  8. pause
复制代码
但是运行之后并没有得到希望得到的字符串:文本="刘姓"  页码="6" ,而是得到了这个结果:文本="刘姓" "打开外部PDF文档"=="打开外部PDF文档" 页码="6"  ,仔细检查可能问题出现在!str:%a%=!上,因为替换字符串中有=号,但加了转义字符也不管用。请帮忙看看。。。

TOP

本帖最后由 ge_xin_yu 于 2011-5-15 19:45 编辑

2# hanyeguxing
没法获取列,因为包含这个字符串文件大概有几十个,文件中的具体文本格式并不相同,即便在同一个文件中,这个字符串的位置也不相同,有的在第三列,有的在其他列,有的和其他字符串混在一起,而且实际上的行很长,远不止这几列,用列提取不出来,要提的话也太麻烦,只能替换~~~

TOP

本帖最后由 ge_xin_yu 于 2011-5-15 19:59 编辑

3# wc726842270

感谢答复,问题是实际上的文本内容中包含不止一个等号,如果用“delims==",那么其他的等号也被清空了。。。另外,我第一个等号前用了转义字符为什么批处理仍然将其作为赋值符号处理,而不是作为一个普通字符呢,??奇怪!!

TOP

set 替换字符串时能不能用正则表达式呢?如果支持,就可以了替换这个字串中的等号了!!

TOP

[文本处理] 批处理set命令中如何替换等号?

set命令可以替换指定的字符串,但如果字符串包含等号,该如何替换,比如:
  1. @echo off
  2. set a=test=test
  3. set var=%a:test==%
  4. echo %var%
  5. pause
复制代码
希望替换后得到test,结果输出是三个等号===,显然set命令是将第一个等号作赋值号处理,将第一个等号前加转义字符^,改写如下:
  1. @echo off
  2. set a=test=test
  3. set var=%a:test^==%
  4. echo %var%
  5. pause
复制代码
结果输入test=test,也得不到想要的结果,如何实现其中等号的替换,高手看看有没有办法!!!

2# 习风口
你显然是没有测试过,信口开河,两边加上引号是不行的。。。。。。。。。

TOP

这个问题真奇怪,难得批处理没有解决这个问题的办法,高人何在?

TOP

7# applba
你的代码和使用set命令一样,同样是输出三个等号,不知道有没有测试过。。。。

TOP

本帖最后由 ge_xin_yu 于 2011-5-16 02:52 编辑

弄半天是微软的bug,我有一堆文件,被替换的文字包含等号,看来用批处理是没戏了,我还是老老实实用编辑器替换吧,,,

TOP

7# applba
不用set ,直接echo也是不行的。。。。兄弟测试过吗??

TOP

返回列表