2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

バッチファイルで文字列長を取得する

Posted at

Y子です。
今回は、文字列の長さを取得する方法を考えます。
考えましたが、どうもスマートな方法がなく、「1文字ずつ削るループを回して、文字列が空になったらループ回数が長さ」という泥臭い方法に落ち着きました。

#概要・用途
引数に与えた文字列の長さを返します。
用途は幅広いと思いますが、たとえば「○桁以上は○○処理」のような判定に使えます。
確認環境:Windows 10 Home (Bld. 19042.928) →パッチ適用しました

#コード

get_strlen.bat
@echo off

rem 引数がない場合は終了する
if "%~1"=="" (echo 引数がありません & pause & exit /b)

rem 変数初期化(長さ)
set length=0

rem 長さ取得サブルーチンを実行
call :get_strlen %~1
echo 文字数:%length%
exit /b

rem ====サブルーチン====
:get_strlen
  set str_in=%~1
  
  :label_top
  rem 長さ加算
  set /a length+=1
  rem 1文字減らす
  set str_in=%str_in:~1%
  rem 文字列がなくなったら終了
  if not "%str_in%"=="" (goto :label_top)
exit /b

文字列長を取得する部分はサブルーチンにし、流用しやすくしました。
サブルーチンの中でループを回し、1文字削るごとにカウンタを+1します。
文字列がなくなったらループ終了し、そのときのカウンタの数値が文字列長です。

実行結果
> get_strlen.bat a
文字数:1

> get_strlen.bat 123456
文字数:6

> get_strlen.bat あかさたな
文字数:5

> get_strlen.bat ABCかきく
文字数:6

> get_strlen.bat !"#$
コマンドの構文が誤っています。

数値もアルファベットも日本語もカウントできますが、記号は苦手のようです。

#おわりに
Windowsコマンドには、文字列長を取得するものがないんですね。
PowerShell等の既成の機能を使えば、手間もかからず間違いもないかと思いますが、どうしてもバッチファイルだけでなんとかしなければならない場合のために、なんとかする手段を持っておくのも強みになるかもしれません。

ではまた。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?