NOTE: See tip 9485 » A better way to determine the position and length of a sub-string in a string.
NOTE: See tip 9470 » A better way to determine the length of a string.
Using $PosLen and $Length, I have scripted $Position.bat.
The usage syntax is:
$position string sub-string.
$Position.bat returns a $Pos numeric environment variable with the position, from 0, of the sub-string, and a $len numeric environment variable with the length of the sub-string. If the sub-string is not found, the $len environment variable is set to 0.
$Position.bat contains:
@echo off setlocal set /a $pos=0 set /a $len=0 set string=####%1#### set string=%string:####"=% set string=%string:"####=% if "%string%" EQU "" goto end set string=%string:####=% set substring=####%2#### set substring=%substring:####"=% set substring=%substring:"####=% if "%substring%" EQU "" goto end set substring=%substring:####=% for /f "Tokens=*" %%k in ('@echo %%string:%substring%^=%%') do @set $work$=%%k if "%look%" EQU "%$work$%" goto end call $length "%string%" if %$len% EQU 0 goto end set /a len=%$len% call $length "%substring%" if %$len% EQU 0 goto end set /a pos=0 :loop if %pos% GTR %len% set /a $len=0&goto end call $poslen "%string%" %pos% %$len% if "%$substring%" EQU "%substring%" set /a $pos=%pos%&goto end set /a pos=%pos% + 1 goto loop :end endlocal&set /a $pos=%$pos%&set /a $len=%$len% REM end $Position
Demonstration of usage:
To locate every entry in HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Printers that contains the %LogonServer% computer name, run:@echo off regedit /a %TEMP%\temp.reg "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Printers" set ls=%logonServer:\=% set /a seq=0 for /f "Tokens=*" %%i in (%TEMP%\temp.reg) do set line=%%i&call :parse del /f /q %TEMP%\temp.reg goto :EOF :parse set look=%line:"=*% call $poslen "%look%" 0 1 if "%$substring%" EQU "\[" set key=%line% set /a seq=%seq% + 1 call $position "%look%" %ls% if %$len% EQU 0 goto :EOF @echo line:%seq% @echo key:%key% @echo Position:%$pos% @echo Length:%$Len% @echo Data:%line% @echo.The output would look similar to:
line:435 key:\[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Printers\HP Business Inkjet 2250 PCL 5C\] Position:12 Length:6 Data:"Port"="\\\\JSI001\\HP2250" line:706 key:\[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Printers\HP Business Inkjet 2250 PS\] Position:12 Length:6 Data:"Port"="\\\\JSI001\\HP2250"NOTE: See tip 4192 » How can I determine if a string contains a specific sub-set of characters?
0 comments
Hide comments