如何在Windows批处理文件中搜索子字符串的索引

时间:2018-06-29 07:25:05

标签: windows batch-file

我要在批处理文件中搜索以下示例字符串中提到的tenantDomain org_id

<ax2697:tenantDomain>org_12345678

ax2697始终是动态的,我需要在批处理文件中检索字符串org_12345678

可能需要2次手术。

  1. 获取“ tenantDomain>”的索引
  2. 从索引中检索org_12345678。

我在论坛上看不到任何有希望的解决方案。
请提出建议。

2 个答案:

答案 0 :(得分:3)

恐怕您的问题很令人困惑...您是否需要 Substring的索引还是需要以检索Substring ?您是否接受不使用子字符串提取索引的解决方案? :/

下面的批处理文件检索在较大字符串中位于 tenantDomain>之后的子字符串:

@echo off

set "string=<ax2697:tenantDomain>org_12345678"

set "x=%string:tenantDomain>=" & set "substring=%"

echo %substring%

输出:

org_12345678

答案 1 :(得分:2)

尝试一下:

@echo off
set "string=<ax2697:tenantDomain>org_12345678"
set "string=%string:<=#%"
set "string=%string:>=#%"

set "find_index_of=org_12345678"

call :indexof "%string%" "%find_index_of%" index

echo %index%

exit /b 0
:indexof [%1 - string ; %2 - find index of ; %3 - if defined will store the result in variable with same name]
::http://ss64.org/viewtopic.php?id=1687
@echo off
setlocal enableDelayedExpansion

set "str=%~1"
set "s=!str:%~2=&rem.!"
set s=#%s%

if "%s%" equ "#%~1" endlocal& if "%~3" neq "" (set %~3=-1&exit /b 0) else (echo -1&exit /b 0) 

  set "len=0"
  for %%N in (4096 2048 1024 512 256 128 64 32 16 8 4 2 1) do (
    if "!s:~%%N,1!" neq "" (
      set /a "len+=%%N"
      set "s=!s:~%%N!"
    )
  )
  endlocal&if "%~2" neq "" (set %~2=%len%) else echo %len%
exit /b 0