プログラミング言語や環境設定を中心としたパソコン関連の技術メモです。
主にシステム開発中に調べたことをメモしています。TIPS的な位置付けで、気が向いたときにちまちま更新していきます。
Windowsバッチファイル(.bat)、数値を特定の桁数になるように0埋めする
結論から書くと

1.数値の左に0をいっぱい付けて、必要桁数分だけ右から取り出す
2.数値の桁数を数えて、必要桁数分だけ左に0を付ける


のどちらかのやり方でいけます。

それでは詳細を書いていきます。

要は「123」を「000123」のようにしたかったわけです。

まず一番単純なやり方はこれでしょうφ(--)

@echo off

setlocal enabledelayedexpansion

REM 対象となる数字
set num=%1

REM 0埋め後の桁数
set pad=%2

REM 0が連続した奴(000……)と元の数字をくっつける
set num=000000000000000000000000000000000%num%

REM 右から0埋め後の桁数分だけ取り出す
set num=!num:~-%pad%!

echo %num%

pause

エラー処理は入れていませんが、ご容赦ください。
理屈はとても単純です。

1.対象となる数字の左に0をいっぱい付ける
2.「1.」の結果に対して、0埋め後の桁数分だけ右から取り出す


で、あっという間に指定桁数分だけ0埋めされた数値が用意できます。

基本はこれだけです。

あとは「左に付ける0」をどのような形で用意するかです。
どこまでこだわるかですね。

例えば、こんな書き方ができますφ(--)

@echo off

setlocal enabledelayedexpansion

REM 対象となる数字
set num=%1

REM 0埋め後の桁数
set pad=%2

REM 0が連続した奴(000000……)を作成
set pad_num=0
for /L %%i in (1, 1, %pad%) do (
    set pad_num=0!pad_num!
)


REM 0が連続した奴(000000……)と元の数字をくっつける
set num=%pad_num%%num%

REM 右から0埋め後の桁数分だけ取り出す
set num=!num:~-%pad%!

echo %num%

pause

0埋め後の桁数に合わせて、0を用意しています。
まず0埋め後の桁数と同じだけ連続する0(000……)を用意して、
それを元の数字にくっつけた後に取り出す形です。
これで、とんでもない桁数を指定されても大丈夫です。

あとは、やり方によって、0埋め後に必要桁数分だけ取り出す作業を無くすこともできます。
元の数字の桁数が分かれば、単に必要な数だけ0を付ければ良いわけです。

だから、こんな書き方もできますφ(--)

@echo off

setlocal enabledelayedexpansion

REM 対象となる数字
set num=%1

REM 対象となる数字の桁数
call :STRLEN %num%
set num_keta=%len%


REM 0埋め後の桁数
set pad=%2

REM 0埋めする回数
set /a pad_cnt=%pad%-%num_keta%

REM 0埋め
for /L %%i in (1, 1, %pad_cnt%) do (
    set num=0!num!
)

echo %num%

pause

:STRLEN

set str=%1
set len=0

:LOOP
if not "%str%"=="" (
    set str=%str:~1%
    set /a len=%len%+1
    goto :LOOP
)

exit /b

「:STRLEN」以降の処理は、文字数を取得するサブルーチンです。
詳細は

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

の記事をご覧ください。
バッチファイルの場合、数値は何も考えずに使うと文字列として扱われます。
そのため文字数を取得することで、数値の桁数を取得できるのです。

数値の桁数が取得できれば後は簡単ですね。
0埋め後の桁数から数値の桁数を引けば、付ける0の数が分かるので、
必要な桁になるまで左にゼロを付ければ良いだけです。

そんなところでしょうか。

バッチファイルで数値の0埋めをする際の基本的な考え方は

1.数値の左に0をいっぱい付けて、必要桁数分だけ右から取り出す
2.数値の桁数を数えて、必要桁数分だけ左に0を付ける


のどちらかです。
お好みの方で実装してください。

完了\(--)/
スポンサーリンク
 
このエントリーをはてなブックマークに追加 

category:コマンド/バッチ  thema:パソコンな日々 - genre:コンピュータ  Posted by ササキマコト 

  関連記事