Nhận Vị trí của chuỗi con,Làm thế nào để có được vị trí của chuỗi phụ trong chuỗi trong hàng loạt
Set str1=This is Test string
Set sstr=Test
Ở đây tôi cần để có được vị trí của "Test" (8).
Thanks ...
Nhận Vị trí của chuỗi con,Làm thế nào để có được vị trí của chuỗi phụ trong chuỗi trong hàng loạt
Set str1=This is Test string
Set sstr=Test
Ở đây tôi cần để có được vị trí của "Test" (8).
Thanks ...
Hãy thử điều này:
@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
Nếu% str1% chứa nhiều hơn một% sstr%, mã sẽ tìm vị trí cuối cùng.
@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%
(này trả về "9", đếm vị trí đầu tiên là "1" Định nghĩa là trong tâm trí của người dùng ....)
Và một sự thay thế bổ sung:
@echo off &setlocal enabledelayedexpansion
Set "str1=This is Test string"
Set "sstr=Test"
set /a position=0
Set "sst0=!str1:*%sstr%=!"
if "%sst0%"=="%str1%" echo "%sstr%" not found in "%str1%"&goto :eof
Set "sst1=!str1:%sstr%%sst0%=!"
if "%sst1%" neq "" for /l %%i in (0,1,8189) do if "!sst1:~%%i,1!" neq "" set /a position+=1
echo.Position of %sstr% is %position%
endlocal
Nếu% str1% chứa nhiều hơn một% sstr%, mã sẽ tìm vị trí đầu tiên.