Windowsバッチファイル(.bat) 文字列の文字数を取得する


この記事はプロモーションを含みます。

Windows

実行時の引数に設定された文字列の文字数を返すシンプルなバッチを作成したので残しておきます。

実行方法

バッチファイル名が「GetStrLength.bat」の場合は以下のように実行します。
結果は変数「errorlevel」に格納されます。

@echo off
call GetStrLength.bat "テスト文字列"
echo %errorlevel%
pause
exit

ソースコード

@echo off

set targetStr=%~1
set length=0

:loop
if not "%targetStr%"=="" (
	set targetStr=%targetStr:~1%
	set /a length=%length%+1
	goto :loop
)

exit /b %length%

丸括弧などの記号を含む場合

丸括弧「(」「)」やダブルクォーテーション「”」などの記号を含む場合はもう一工夫必要です。
実行方法については、前項で説明した方法と同じですが、ソースコードは下記のようになります。

こちらの方法でも、アンパサンド「&」やパイプ「|」などの特殊記号を含む場合は正しく動作しません。様々な記号を含む文字列の文字数を取得する場合は、VBScriptPowerShellを使用する方が良いかもしれません。

@echo off

set targetStr=%~1
set "targetStr=%targetStr:"=a%"
set length=0

:loop
set "targetStr=%targetStr:~1%"
set /a length=%length%+1
if not "%targetStr%"=="" (goto :loop)

exit /b %length%

以下は、呼び出し側のサンプルです(ファイル名は「test.bat」としました)

@echo off
call GetStrLength.bat "a(b)c"de"
echo %errorlevel%
pause
exit

サンプルの実行結果です。
記号を含めて文字数が取得されていることが分かります。

C:\workspace>test.bat
8

以上で、Windowsバッチファイル(.bat) 文字列の文字数を取得するを終了します。

コメント

  1. s より:

    ダブルクオートや丸カッコを含む文字列だとエラーが出ます。改善策願います。

    GetStrLength.bat abc”de
    コマンドの構文が誤っています。

    GetStrLength.bat abc)de
    de の使い方が誤っています。

    • しゃーろっと より:

      当記事に以下のタイトルで追記しましたのでお試しください。
      ・丸括弧などの記号を含む場合

  2. A より:

    丸括弧などの記号を含む場合の記事で引数の文字列を環境変数%Path%に指定した所、4行目のsetが無くても通ってしまいました。

    4行目のsetではどのような処理が起こっているのでしょうか?

    • しゃーろっと より:

      4行目のsetですが、ダブルクォーテーションを適当な文字(サンプルでは「a」)に置き換えています。
      引数にダブルクォーテーションを含む場合、構文誤りのエラーが発生するので、これを回避するために記述しています。

タイトルとURLをコピーしました