for /fのdelimsに文字を設定することで区切って取得することができますが、
forと付いた処理にも関わらず一回しか回らずinの前の変数に区切られた文字が格納されるだけなので、
tokensに「1*」と指定し、区切り文字の一つ目とその後の全ての文字を取得し、
その後の全ての文字を再度区切り対象にすることをgoto文で繰り返して回った数だけカウントすることで、
検索したい文字がいくつあるかを割り出しています。
コマンドプロンプトだとこの程度の処理でもこれだけ手間がかかります。
素直にPowershellとか使った方が楽だとは思いますが参考になれば。
bat
1@echo off
2rem テキストの行毎にループする
3for /f "delims=" %%a in (test.txt) do (
4 rem 文字列カウントサブルーチンを呼び出す
5 call :str_count "%%a"
6)
7pause;
8exit /b
9
10
11rem 文字列カウントサブルーチン
12:str_count
13set var=%~1
14set num=-1
15rem 処理ループラベル
16:str_count_loop
17rem 区切り文字がなくなったら処理終了ラベルに飛ぶ
18if "%var%" EQU "" goto str_count_end
19rem タブ文字で区切って取得する
20for /F "tokens=1* delims= " %%a in ("%var%") do (
21 rem 区切り文字の後の文字を全て取得する
22 set var=%%b
23 rem カウンターを1加算する
24 set /a num=num+1
25)
26rem 処理ループラベルに飛ぶ
27goto :str_count_loop
28
29rem 処理終了ラベル
30:str_count_end
31echo %num%
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/03/23 08:34