Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to get position of the sub string in string in batch

Get The position of the substring,

  Set str1=This is Test string
  Set sstr=Test

Here i need to get the position of "Test"(8).

Thanks...

like image 854
user1553605 Avatar asked Mar 19 '13 08:03

user1553605


2 Answers

@echo OFF
SETLOCAL
Set "str1=This is Test string"
Set "sstr=Test"
SET stemp=%str1%&SET pos=0
:loop
SET /a pos+=1
echo %stemp%|FINDSTR /b /c:"%sstr%" >NUL
IF ERRORLEVEL 1 (
SET stemp=%stemp:~1%
IF DEFINED stemp GOTO loop
SET pos=0
)

ECHO Pos of "%sstr%" IN "%str1%" = %pos%

(This returns "9", counting the first position as "1". The definition is in the mind of the user...)

like image 194
Magoo Avatar answered Nov 15 '22 21:11

Magoo


Try this:

@echo off &setlocal enabledelayedexpansion
Set "str1=This is Test string"
Set "sstr=Test"
call :strlen str1 len1
call :strlen sstr len2
set /a stop=len1-len2
if %stop% gtr 0 for /l %%i in (0,1,%stop%) do if "!str1:~%%i,%len2%!"=="%sstr%" set /a position=%%i
if defined position (echo.Position of %sstr% is %position%) else echo."%sstr%" not found in "%str1%"
goto :eof

:strlen
:: list string length up to 8189 (and reports 8189 for any string longer than 8189
:: function from http://ss64.org/viewtopic.php?pid=6478#p6478
(   setlocal enabledelayedexpansion & set /a "}=0"
    if "%~1" neq "" if defined %~1 (
        for %%# in (4096 2048 1024 512 256 128 64 32 16) do (
            if "!%~1:~%%#,1!" neq "" set "%~1=!%~1:~%%#!" & set /a "}+=%%#"
        )
        set "%~1=!%~1!0FEDCBA9876543211" & set /a "}+=0x!%~1:~32,1!!%~1:~16,1!"
    )
)
endlocal & set /a "%~2=%}%" & exit /b
endlocal

If %str1% contains more than one %sstr%, the code will find the last position.

like image 35
Endoro Avatar answered Nov 15 '22 19:11

Endoro