Board logo

标题: [文本处理] set %str:1+1=2=2+2=4%这样的替换批处理如何实现? [打印本页]

作者: cyfoslh    时间: 2011-10-5 14:04     标题: set %str:1+1=2=2+2=4%这样的替换批处理如何实现?

如题. 用了脱字符也不行~
作者: CrLf    时间: 2011-10-5 14:06

等号无解
作者: BAT1    时间: 2011-10-5 14:56

看不懂题目了。请楼主换一种方式描述好吗?
作者: wc726842270    时间: 2011-10-5 14:58

如果单纯的用这个方法是实现不了的,还是结合其它的命令吧
作者: cyfoslh    时间: 2011-10-5 15:03

看不懂题目了。请楼主换一种方式描述好吗?
BAT1 发表于 2011-10-5 14:56



    意思就是:把 1+1=2这样的变量替换成2+2=4。
作者: cyfoslh    时间: 2011-10-5 15:04

如果单纯的用这个方法是实现不了的,还是结合其它的命令吧
wc726842270 发表于 2011-10-5 14:58



    恳请指教!
作者: wc726842270    时间: 2011-10-5 15:23

  1. @echo off
  2. set "str=1+1=2"
  3. for /f "tokens=1* delims==" %%i in ("%str%") do set "str2=%%i#%%j"
  4. echo %str:1+1#2=2+2=4%
  5. pause
复制代码

作者: FOR    时间: 2011-10-5 15:23

本帖最后由 FOR 于 2011-10-5 15:24 编辑
  1. @echo off
  2. set str=1+1+5+8
  3. set "str=%str:1+1=2=2+2=4%"
  4. echo %str%
  5. pause
复制代码
等号无法替换
作者: CrLf    时间: 2011-10-5 20:22

偏移法最简单,我就不说了,但是这种算法存在效率问题,进行些许提速,不过变得很冗长很麻烦,各有利弊吧...
  1. @echo off&setlocal enabledelayedexpansion
  2. set var=1+123q ewfer 3qfasd efqer 1+1=2=2+2=4 awefawe
  3. set str1=1+1=2=2+2=4
  4. set str2=3+3=6
  5. set len=11
  6. ::var 为要修改的字符串,str1 为被替换的内容,len 为 str1 的字符长度,str2 为替换后的内容
  7. echo 修改前 !var!
  8. for /f %%z in ("!str1!") do (
  9. for /l %%a in (0 75 8189) do (
  10. set test=!var:~%%a,100!
  11. if "!test:%%z=!" neq "!test!" (
  12. for /l %%b in (0 1 99) do (
  13. if "!test:~%%b,%len%!"=="!str1!" (
  14. set /a a=%%a+%%b,b=%%a+%%b+len
  15. for /f "tokens=1,2" %%c in ("!a! !b!") do set var=!var:~,%%c!!str2!!var:~%%d!
  16. )
  17. )
  18. )
  19. )
  20. )
  21. echo 修改后 !var!
  22. pause
复制代码





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