在一行中计算一个确切的字符 - cmd

j b*_*j b 5 cmd batch-file

我想编写一个批处理文件来计算文本文件每一行中特定字符的出现次数。

例如,\字符串中的计数为"aa\bb\cc\dd\"4。

findfindstr线这是只显示号码包含的确切性质。

npo*_*aka 2

这是一种方法:

 @echo off
:checkCountOf string countOf [rtnrVar]
:: checks count of a substring  in a string 
setlocal EnableDelayedExpansion
set "string=aa"

set "string=%~1"
set "checkCountOf=%~2"

if "%~1" equ "" (
    if "%~3" neq "" (
        endlocal & (
           echo 0
           set "%~3=0"
           exit /b 0
        )
    ) else (
        endlocal & (
           echo 0
           exit /b 0
        )
)


)

if "!checkCountOf!" equ "$" (
    set "string=#%string%#"
    set "string=!string:%checkCountOf%%checkCountOf%=#%checkCountOf%#%checkCountOf%#!"
) else (
    set "string=$%string%$"
    set "string=!string:%checkCountOf%%checkCountOf%=$%checkCountOf%$%checkCountOf%$!"
)


set LF=^


rem ** Two empty lines are required
set /a counter=0


for %%L in ("!LF!") DO (
    for /f "delims=" %%R in ("!checkCountOf!") do ( 
        set "var=!string:%%~R%%~R=%%~L!"
        set "var=!var:%%~R=%%~L!"

        for /f "tokens=* delims=" %%# in ("!var!") do (
            set /a counter=counter+1
        )
    )
)

if !counter! gtr 0 (
    set /a counter=counter-1
)

if "%~3" neq "" (
    endlocal & (
       echo %counter%
       set "%~3=%counter%"
    )
) else (
    endlocal & (
       echo %counter%
    )
)
Run Code Online (Sandbox Code Playgroud)

你可以这样称呼它:

call ::checkCountOf "/aa/b/c/" "/" slashes
echo %slashes%
exit /b %errorlevel% 
Run Code Online (Sandbox Code Playgroud)

不适用于某些特殊字符("~!

您还可以使用替换和:strlen 函数

  • 遗憾的是,不会为“\\”序列返回正确的结果。 (3认同)