times through script loop for directories delims batch bat windows for-loop batch-file cmd

windows - through - Cómo obtener la posición de la cadena secundaria en cadena en lote



script for windows (3)

Prueba esto:

@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

Si% str1% contiene más de un% sstr%, el código encontrará la última posición.

Obtener la posición de la subcadena,

Set str1=This is Test string Set sstr=Test

Aquí necesito obtener el puesto de "Prueba" (8).

Gracias...


Y una alternativa adicional:

@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

Si% str1% contiene más de un% sstr%, el código encontrará la primera posición.


@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%

(Esto devuelve "9", contando la primera posición como "1". La definición está en la mente del usuario ...)