标题: [文本处理] 批处理文件怎样替换字符串中的等号/指定字符? [打印本页]
作者: 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
- 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 编辑
- @echo off
- SETLOCAL EnablEdElayEdExpansion
-
-
- ::调用实例
- set "a=&=b=^=c"
- call :dec "%a%" tmp
- echo "%tmp%"
- pause
- goto :eof
-
-
- ::=====子程序开始
- :dec
- :: 使用说明
- :: %1 为要处理的数据,必须包含双引号
- :: %2 为存放返回值的变量名称
- :: 使用范例
- :: call :dec "x=y" z ——传入字符为 x=y,返回值存放在变量z中。
- :: call :dec "%a%" a ——传入变量a的值,返回值存放在变量a中。
-
- set "var=%~1"
- if "%var%" equ "" set "var=a=&=b=^=c"
- :loop
- set "var1=!var:~%i%,1!"
- if not "%var1%" equ "=" set "s=%s%%var1%"
- set /a i+=1
- if not "%var1%" equ "" goto loop
- if "%2" equ "" (echo "%s%" ) else set "%2=%s%"
- goto :eof
- ::=====子程序结束
复制代码
做成子程序后处理^ 和% 字符有问题,其他符号没问题,头疼
作者: 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来获取返回值~- @echo off
- SETLOCAL EnablEdElayEdExpansion
- set "var=%~1"
- :loop
- set "var1=!var:~%i%,1!"
- if not "%var1%" equ "=" set "s=%s%%var1%"
- set /a i+=1
- if not "%var1%" equ "" goto loop
- echo "%s%"
- 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 |