ちょっと作ってみたツール

SEを10年くらいやっていました。あったら便利だなーってツールを書いています

固定長の長さの数値を使いまわすバッチ

頑張った割には糞どうでもいいものがあったりするものがあります。

使い方

(ここでは後述のソースをnumbered.batで保存したとします) 大域変数にバッチ名の変数名で数字を保存します。 バッチを呼び出される度にデータがカウントアップします

サンプル

numbered.bat 4 echo {}
0000
numbered.bat 4 echo {}
0001
REM ファイルの古い順に(4ケタの数字).datというファイル名でリネームします
for /F %i in ('dir /OD /B') DO numbered.bat 4 MOVE "%i" {}.dat

ソース

@ECHO OFF
SETLOCAL EnableDelayedExpansion

CALL :COUNT
ENDLOCAL
@ECHO ON

@REM 大域環境変数にぶっこむ
@SET "%~nx0=%ERRORLEVEL%"

@ECHO OFF
SETLOCAL EnableDelayedExpansion

REM ゼロパディング作成
FOR /L %%i in (1,1,%1) DO SET ZEROS=0!ZEROS!

REM 大域変数から値を再取得。パディングした文字列とくっつけ、指定の文字長分だけ取り出す
SET Y=!%~nx0!
SET Y=%ZEROS%%Y%
SET Y=!Y:~-%1,%1!

REM コマンド分を作成。最初の引数は扱わないようにFLAGでコントロール
SET FLAG=0
SET CMD=
FOR %%I IN (%*) DO IF !FLAG! == 0 (SET /A FLAG=1) ELSE (SET CMD=!CMD! %%I)
SET CMD=!CMD:{}=%Y%!

REM コマンド実行先頭に無駄なスペースが入っているので削除しておく
!CMD:~1!

ENDLOCAL
@ECHO ON
@goto :EOF

:COUNT

SET /A X="%~nx0=!%~nx0! + 1"
EXIT /B !X!