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

[文本处理] 批处理文件怎样替换字符串中的等号/指定字符?

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

现在有一个变量var,且var=abc=def
问题是:将var变量中的等号替换掉,得到结果为var=abcdef
如何做到?

本帖最后由 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"

TOP

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

回复 4# ivor


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

TOP

本帖最后由 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. ::=====子程序结束
复制代码
做成子程序后处理^ 和% 字符有问题,其他符号没问题,头疼

TOP

回复 3# yoyobye


没有。从今天开始接触sed吧

TOP

回复 3# yoyobye


   知道你不只是想要替换这一个变量, 请把你的情况说详细一点

TOP

谢谢,还没有接触sed,有没有批处理语句能够解决呢?

TOP

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

TOP

返回列表