批处理for循环查找变量中的字符串



我想在变量Code=AAABASDG中找到字符串A并且每次都数一数,如果&;a &;所以结果应该是输出4,因为在Code变量中有4个A

示例代码:

@echo off
set /A C=0
set Code=AAABASDG
for %%i in (%Code%) do IF "%%i"=="A" set /A C=%C%+1
echo %C%
pause

可以获取原字符串A的长度,然后删除"A"并得到结果的长度,最后减去两个长度。

为了方便地获得字符串的长度,您可以将其存储在一个文件中,然后请求文件的%%~Z大小。

@echo off
setlocal 
set "Code=AAABASDG"
> before.txt echo %code%
> after.txt echo %code:A=%
for %%b in (before.txt) do for %%a in (after.txt) do set /A "count=%%~Zb-%%~Za"
echo %count%

该方法的唯一缺点是它不区分大小写:在替换操作

中,大写字母和小写字母都被删除。
@echo off
set /A C=0
set "Code=AAABASDG"
:loop
if defined code (
if "%code:~-1%"=="A" set /a C+=1
set "code=%code:~0,-1%"
goto loop
)
echo %C%

使用set "var=value"设置字符串值-这避免了尾随空格引起的问题。不要分配"或终端反斜杠或空格。从元素中构建路径名——与直觉相反,这可能会使过程更容易。

批量中的子字符串从%var:~m,n%中获得,其中,n为可选;m是count-of-char -from- begin_of -string,如果为负数则为end。,npositive = max length to return;Negative = end-position;missing=返回m后面的全部

下面是一个得到PowerShell帮助的快速示例:

@Echo Off
SetLocal EnableExtensions
Set "Code=AAABASDG"
For /F %%G In ('%SystemRoot%System32WindowsPowerShellv1.0powershell.exe
-NoProfile "[RegEx]::Matches('%Code%','A').Count"') Do Set "C=%%G"
Echo(%C%
Pause

最新更新