• ベストアンサー

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桁で返したいのですが、どのようにすれば良いでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • pita-gora
  • ベストアンサー率70% (102/145)
回答No.2

単に、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 /? のヘルプに記載があります。

nao-k
質問者

お礼

ご回答ありがとうございます。 うまく実行できました。

その他の回答 (2)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

#1>先頭に0をつけてしまうと途中で3桁になってしまうのです。 #2様の回答にあるように set DT=%DT:~-2% のようにして後から2桁取り出すことができます。

nao-k
質問者

お礼

アドバイスありがとうございます。 他の質問にも回答してくださっていて、非常に感謝しています。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

さしあたり echo 0%%F のようにすればいいかと思います。 一般的には、バッチで数値の書式化ってできないような気がしますので、そういうことが必要ならVBScript を使われるといいかと思います。

nao-k
質問者

お礼

アドバイスありがとうございます。 >echo 0%%F →01から31までを2桁で返していきたいので、  先頭に0をつけてしまうと途中で3桁になってしまうのです。

関連するQ&A