- ベストアンサー
MS-DOS: for文で「01」が「1」になってしまいます
よろしくお願いします。 Windows 2000 Server についての質問です。 for文を使いバッチを組んでいます。 形式は下記です。 FOR /L %変数 IN (開始,ステップ,終了) DO コマンド [コマンドパラメータ] 1.例えば、次のようにバッチファイル(test.bat)に記述します。 for /L %%F IN (%1,1,%2) DO echo %%F 2.そして、次のようにコマンドプロンプトで実行します。 test.bat 01 06 3.エコーとして返るのは、1,2,3,4,5,6 という1桁の数値であり、 01,02,03,04,05,06 という2桁の数値ではありません。 後者のように2桁で返したいのですが、どのようにすれば良いでしょうか。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
単に、01~31を二桁で表示したいだけなら for /L %%F IN (%1,1,%2) DO if %%F LEQ 9 (echo 0%%F) else (echo %%%F) とif文で場合分けすれば可能です。 しかし、for文の中で数字を使って何か処理をさせたいなら、一桁のままにして(計算などの処理に使って) setlocal ENABLEDELAYEDEXPANSION for /L %%F IN (%1,1,%2) DO ( set /a など何かの処理 set DT=0%%F set DT=!DT:~-2! echo !DT! ) などと、遅延環境変数の展開を使った方がいいかもしれません。 遅延環境変数の展開については、set /? のヘルプに記載があります。
その他の回答 (2)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
#1>先頭に0をつけてしまうと途中で3桁になってしまうのです。 #2様の回答にあるように set DT=%DT:~-2% のようにして後から2桁取り出すことができます。
お礼
アドバイスありがとうございます。 他の質問にも回答してくださっていて、非常に感謝しています。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
さしあたり echo 0%%F のようにすればいいかと思います。 一般的には、バッチで数値の書式化ってできないような気がしますので、そういうことが必要ならVBScript を使われるといいかと思います。
お礼
アドバイスありがとうございます。 >echo 0%%F →01から31までを2桁で返していきたいので、 先頭に0をつけてしまうと途中で3桁になってしまうのです。
お礼
ご回答ありがとうございます。 うまく実行できました。