2013-03-19 6 views

risposta

2

provare questo:

@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 

Se% str1% contiene più di un% SSTR%, il codice troverà l'ultima posizione.

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

(Questo restituisce "9", contando la prima posizione "1" La definizione è nella mente dell'utente ....)

4

E un'altra alternativa:

@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 

Se% str1% contiene più di% sstr%, il codice troverà la prima posizione.

Problemi correlati