スクリプトの助けが必要です。スクリプトは|
、特定の文字列の前の数をカウントすることになっています。
info.txt
text=jam|hello=123|result=ok|cow=cat|...
したがって、この例では、result= Is this possible in batch? を検索すると、答えは 2 になるはずです。
スクリプトの助けが必要です。スクリプトは|
、特定の文字列の前の数をカウントすることになっています。
info.txt
text=jam|hello=123|result=ok|cow=cat|...
したがって、この例では、result= Is this possible in batch? を検索すると、答えは 2 になるはずです。
これを試して:
@ECHO OFF &SETLOCAL
SET "string=text=jam|hello=123|result=ok|cow=cat|..."
SET "stop=result=ok"
SET "char=|"
SET /a count=-1
SET "org=%string%"
:loop
FOR /f "tokens=1*delims=%char%" %%a IN ("%string%") DO SET "this=%%a"&SET "that=%%b"
IF DEFINED that (SET "string=%that%") ELSE (SET "string=%this%")
SET /a count+=1
IF NOT DEFINED string (ECHO NOT found: "%stop%" &GOTO :EOF)
IF NOT "%this%"=="%stop%" GOTO :loop
ECHO Number of "%char%" IN "%org%" until "%stop%": %count%
これは repl.bat と呼ばれるヘルパー バッチ ファイルを使用します。
このコードを以下で呼び出すと、次searchstring.bat
のように起動できます
searchstring "result="
ファイルごとに 1 つの一致のみが想定され、大文字と小文字が区別されます。
@echo off
type "file.txt" | find "%~1" | repl "(.*).%~1.*" "$1" | repl "\x7c" "\r\n" x | find /c /v ""
以下のこのバッチ ファイルは、行番号が 0 より大きい場合、行番号のカウントとその番号自体を、file.txt
@echo off
if "%~1"=="" ( echo add a search term&pause&goto :EOF)
for /f "tokens=1,* delims=:" %%a in ('findstr /n "^" "file.txt" ') do (
for /f %%c in (' echo "%%b"^| find "%~1" ^| repl "(.*).%~1.*" "$1" ^| repl "\|" "\r\n" x ^| find /c /v "" ') do (
if %%c GTR 0 echo Line %%a: %%c
)
)
pause
これが別の方法です(info.txtファイルを使用します)。大文字小文字を区別しません。ファイル内の文字列が一致する複数の行を処理します。
@echo off
set "SpecificString=result=ok"
set /A cnt=0
for /F "tokens=*" %%A IN (info.txt) do (
for /F "usebackq tokens=*" %%B IN (`echo."%%A" ^| find /I "%SpecificString%"`) do (
call :Parse "%%~A"
)
)
pause
goto :eof
:Parse
for /F "usebackq tokens=1* delims=^|" %%B IN (`echo."%~1"`) do (
if /I "%%~B"=="%SpecificString%" (
echo.Cnt=%Cnt% in "%%A"
echo.
set /A Cnt=0
goto :eof
)
set /A Cnt+=1
call :Parse "%%~C
)
goto :eof