Batch file 批处理文件统计字符串中出现的所有字符

Batch file 批处理文件统计字符串中出现的所有字符,batch-file,cmd,count,increment,Batch File,Cmd,Count,Increment,我有一个版本号17.06.01.01,我想知道有多少条目按时段分割 我的最后一段代码是 setlocal ENABLEDELAYEDEXPANSION for /F "tokens=1-10 delims=." %%a in ("17.09.01.04.03") do ( set /a "iCount+=1" echo %%a, !iCount! ) endlocal 我尝试了许多“For”命令,但每次似乎都离得更远。用空格(作为分隔符)替换每个点。然后计算令牌数: @echo off se

我有一个版本号17.06.01.01,我想知道有多少条目按时段分割

我的最后一段代码是

setlocal ENABLEDELAYEDEXPANSION
for /F "tokens=1-10 delims=." %%a in ("17.09.01.04.03") do (
set /a "iCount+=1"

echo %%a, !iCount!
)
endlocal

我尝试了许多“For”命令,但每次似乎都离得更远。

用空格(作为分隔符)替换每个点。然后计算令牌数:

@echo off
set "string=17.09.01.04.03"
set count=0
for %%a in (%string:.= %) do set /a count+=1
echo %count%
(如果字符串中有其他空格、逗号或制表符,则可能会给出错误的结果,但对于仅包含数字和点的版本字符串的示例来说,这应该很好)

@特林杰:

echo off
set "string=1>7.0 9.0&1.04.0!3"
set count=0
:again
set "oldstring=%string%"
set "string=%string:*.=%"
set /a count+=1
if not "%string%" == "%oldstring%" goto :again
echo %count%

一种不同的方法,比较用零替换点之前和之后

@Echo off&SetLocal EnableExtensions EnableDelayedExpansion
set "string=17.09.01.04.03"
set "str2=%string:.=%"
call :strlen string ret
call :strlen str2 ret2
Set /A "Dots=ret-ret2"
echo Number of dots in %string% is %Dots%
goto :Eof

:strLen string len
:$source http://www.dostips.com/?t=Function.strLen
(SETLOCAL ENABLEDELAYEDEXPANSION
 set "str=A!%~1!"
 set "len=0"
 for /L %%A in (12,-1,0) do (set /a "len|=1<<%%A"
    for %%B in (!len!) do if "!str:~%%B,1!"=="" set /a "len&=~1<<%%A")
)
ENDLOCAL&IF "%~2" NEQ "" SET /a %~2=%len%
EXIT /b

对于您提供的示例字符串,'s就足够了


但是,如果字符串包含令牌分隔符(空格、
=
)、引号(
)、通配符(
*
)或其他特殊字符(
^
&
)(
完美,我也在玩弄代币部分,但永远不会得到这个答案。为快速的答案干杯!我喜欢这个想法。我很好奇是否有人愿意发布一个没有任何可能的错误结果的通用方法。@treintje:我相信,有人会找到一种方法让它失败,但它应该失败d相当健壮(至少对于合理的字符串是如此)。请参阅我的编辑。(我自己找到了一种使其失败的方法
:d
set“string=1>7.0%9.0&1.04.%0!3”
(两个离群的
%
将字符串放入一个(未定义的)变量中)我的合理字符串
set“string=Tim说:“有一只猫和一只狗”“
失败,
命令“is”错误或未知
。我知道,这不是一个完整的版本号,但我喜欢防弹解决方案
Pass: set "string=Tim says:"There is a cat and a dog""
Fail: set "string=1>7.0% 9.0&1.04.%0!3"
Pass: set "string=Tim says:"There is a cat. And a dog""