Board logo

标题: [文本处理] [已解决]批处理获取字符串中某一字符出现的位置 [打印本页]

作者: 踏沙行    时间: 2018-8-24 09:45     标题: [已解决]批处理获取字符串中某一字符出现的位置

本帖最后由 踏沙行 于 2018-8-30 05:15 编辑

不使用第三方命令,怎么获取革个字符串在字符中先后出现的位置呢?
下面是我的代码,但是一运行就闪退,很可能是变量嵌套的问题,求大神修正,谢谢。(头痛的问题,每次遇到都胆怯)
  1. rem 获取变量MO代表的字符串中,字符"D"先后出现的位置
  2. @echo off
  3. Setlocal enabledelayedexpansion
  4. set "MO=ABCDEFGDE"
  5. set/a "o=0"
  6. :Loop
  7. if not "%MO:~!o!,1%"=="" (
  8. if not "%MO:~!o!,1%"=="D" (
  9. set/a o+=1 &goto Loop ) else (
  10. set "@o=o" )
  11. )
  12. set @
复制代码

作者: Batcher    时间: 2018-8-24 11:01

MO=ABCDEFGDE
以这个字符串为例,你希望得到的结果是什么?
作者: 踏沙行    时间: 2018-8-24 21:04

回复 2# Batcher 其中的“D”出现几次,分别在什么位置?
作者: xczxczxcz    时间: 2018-8-26 20:03

按你的方法
  1. @echo off
  2. set "MO=ABCDEFGDEADKEFDCFKSEDFASDFGHETYUERTYSDFGHJZXCVBASDFGERSDD"
  3. set /a n=-1
  4. set/p=出现 D 的各个位置: <nul
  5. :LOOP
  6. set /a n=%n%+1 & set /a n1=%n%+2
  7. call set "STR=%%MO:~%n%,1%%"
  8. if defined STR (if "%STR%" == "D" (set/p=%n1% <nul &set /a m=%m%+1)
  9.    goto LOOP)
  10. echo;&echo;
  11. echo 共出现 %m% 次 D
  12. echo;&pause
复制代码
=================




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