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

[文本处理] 批处理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,也得不到想要的结果,如何实现其中等号的替换,高手看看有没有办法!!!

9# ge_xin_yu
set a=动作="打开外部PDF文档" 该改为 set a=“动作="打开外部PDF文档"”
不然会把 "打开外部PDF文档" 赋值给a 和 动作

TOP

按照5楼给出的思路,是逐个替换才能替换掉“=”,但你的要求是把“test=”合起来替换为空,如此,我只能想到偏移来实现要求——%a:5%。

TOP

10# ge_xin_yu


能否贴一点文本出来看看?我可以帮你试试
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

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

TOP

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

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

TOP

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

TOP

用for + "delims==" 再合并

TOP

set语句进行等号的替换绝对会出错,你要回避set这一用用法!

TOP

本帖最后由 applba 于 2011-5-16 03:09 编辑

set命令在执行初期会处理引号、等号。
第一个等号作为变量名和值的分隔符!
任何字符都可以作为变量名,除了等号。

变量引用增强时,(字符串替换时)依然把第一个=看作分隔符。

解决方法如下,你的var完全是多余的:
  1. @echo off
  2. set a=test=test
  3. echo %a:test==%
  4. pause
复制代码
变量引用增强时,(字符串替换时)依然把第一个=看作分隔符。
所以上面的方法自然也是无效的。
但是字符串的截取是不涉及=号分隔符的。
  1. @echo off
  2. SETLOCAL enabledelayedexpansion
  3. set "a=test=test"
  4. echo %a%
  5. echo !a:test^==-4!
  6. pause
复制代码
以上代码复合题意……

TOP

要想彻底解决这个问题估计要找比尔。。。
***共同提高***

TOP

问题比较麻烦
以下的两个思路可以参考以下
http://www.bathome.net/viewthrea ... omuid=3023#pid77341
http://www.bathome.net/viewthrea ... omuid=3023#pid77497

可能以前还提到了一些其它方法
善用搜索
天的白色影子

TOP

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

TOP

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

TOP

两边加上双引号

TOP

返回列表