Board logo

标题: [文本处理] 批处理文件怎样替换字符串中的等号/指定字符? [打印本页]

作者: yoyobye    时间: 2012-1-29 10:48     标题: 批处理文件怎样替换字符串中的等号/指定字符?

本帖最后由 pcl_test 于 2017-3-24 08:40 编辑

现在有一个变量var,且var=abc=def
问题是:将var变量中的等号替换掉,得到结果为var=abcdef
如何做到?
作者: find    时间: 2012-1-29 12:01

  1. echo var=abc=def | sed "s/\(=.*\)=/\1/"
复制代码

作者: yoyobye    时间: 2012-1-29 12:03

谢谢,还没有接触sed,有没有批处理语句能够解决呢?
作者: ivor    时间: 2012-1-29 13:23

回复 3# yoyobye


   知道你不只是想要替换这一个变量, 请把你的情况说详细一点
作者: find    时间: 2012-1-29 14:53

回复 3# yoyobye


没有。从今天开始接触sed吧
作者: applba    时间: 2012-1-29 19:54

本帖最后由 applba 于 2012-1-29 22:25 编辑
  1. @echo off
  2. SETLOCAL EnablEdElayEdExpansion
  3. ::调用实例
  4. set "a=&=b=^=c"
  5. call :dec "%a%" tmp
  6. echo "%tmp%"
  7. pause
  8. goto :eof
  9. ::=====子程序开始
  10. :dec
  11. :: 使用说明
  12. ::   %1 为要处理的数据,必须包含双引号
  13. ::   %2 为存放返回值的变量名称
  14. :: 使用范例
  15. ::    call :dec "x=y" z  ——传入字符为 x=y,返回值存放在变量z中。
  16. ::    call :dec "%a%"  a  ——传入变量a的值,返回值存放在变量a中。
  17. set "var=%~1"
  18. if  "%var%" equ "" set "var=a=&=b=^=c"
  19. :loop
  20.   set "var1=!var:~%i%,1!"
  21.   if not "%var1%" equ "=" set  "s=%s%%var1%"
  22.   set /a  i+=1
  23.   if not "%var1%" equ "" goto loop
  24. if "%2" equ "" (echo "%s%" ) else  set "%2=%s%"
  25. goto :eof
  26. ::=====子程序结束
复制代码
做成子程序后处理^ 和% 字符有问题,其他符号没问题,头疼
作者: yoyobye    时间: 2012-1-29 21:04

本帖最后由 yoyobye 于 2012-1-29 21:10 编辑

回复 4# ivor


    就是这个问题(纯技术问题,实际中比如文件名中含有等号需要替换的,不过我没找到更好的办法)。。。有点麻烦,正在看6楼的代码,呵呵
作者: applba    时间: 2012-1-29 22:21

本帖最后由 applba 于 2012-1-29 22:35 编辑

回复 7# yoyobye

做成call子程序是有问题的,call无法解决 %和^符号,其他符号没问题~
不过已经找到解决办法了,做成独立的批处理,通过for /f来获取返回值~
  1. @echo off
  2. SETLOCAL EnablEdElayEdExpansion
  3. set "var=%~1"
  4. :loop
  5.     set "var1=!var:~%i%,1!"
  6.     if not "%var1%" equ "=" set "s=%s%%var1%"
  7.     set /a  i+=1
  8.     if not "%var1%" equ "" goto loop
  9. echo "%s%"
  10. goto :eof
复制代码
把以上代码存为 dec.cmd

然后这样使用:
for /f  "delims=" %%a in ('dec.cmd "b=%%=&=^=d"') do set "a=%%~a"

set "a=b=%%=&=^=d"
for /f  "delims=" %%a in ('dec.cmd "%a%"') do set "a=%%~a"




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2