アプリ版:「スタンプのみでお礼する」機能のリリースについて

DOSコマンドでの値の範囲チェック方法

DOSコマンドでの値の範囲チェック方法を教えてください。
やりたいことのイメージは以下の感じです。

画面からの入力を受けそのあとの処理を実行するが、
入力を受けた際に後続の処理で使用できる値(0~9,A~F)かどうかをチェックし、
使用できない値だったら再入力を促す、という感じです。

:BG
SET /P INPUT_BG=値を入力してください:
IF (INPUT_BGが1文字ではない || INPUT_BGが0~9,A~Fではない) (
echo 0~9,A~Fの一文字で入力してください
GOTO :BG
)

…INPUT_BGを使った処理…


最悪の場合、以下のようにIF文を入れ子にすれば実現できることは確認しています。
IF NOT "%INPUT_BG%"=="0" (
IF NOT "%INPUT_BG%"=="1" (
IF NOT "%INPUT_BG%"=="2" (
echo 0~9,A~Fの一文字で入力してください
GOTO :BG
)
)
)
しかしあまりにもかっこ悪い。
しかもめんどいし、16個の入れ子なんか見たくない。


ということでエレガントな書き方を教えてください。
よろしくお願いします。

A 回答 (2件)

エレガントかどうかはわかりませんが、下記のような書き方も出来ます。


※インデントのため、全角スペースを入れています。

コマンドプロンプトで
SET /?
IF /?
などとすると幸せになれるかもしれません。

------------------------------------------------------------
@echo off

:BG
SET /P INPUT_BG=値を入力してください:

rem 1文字取り出す
SET A=%INPUT_BG:~0,1%

rem 取り出した文字と入力文字が同一なら入力文字数は1文字
IF %A%'==%INPUT_BG%' (
  rem 0~9を許容
  IF %A% GEQ 0 (
    IF %A% LEQ 9 (
      GOTO NEXT
    )
  )
  rem A~Fを許容
  IF %A% GEQ A (
    IF %A% LEQ F (
      GOTO NEXT
    )
  )
)
ECHO 0~9,A~Fの一文字で入力してください
GOTO BG

:NEXT
echo %INPUT_BG%
pause
------------------------------------------------------------
    • good
    • 0
この回答へのお礼

おおー。いろいろすばらしいです。
DOSでのIF文はこう書くべきという事がだいぶ理解できた気がします。


いくつか参考にしたサイトでは、
GEQ等の記述はありませんでした。

if - Windowsコマンド集:ITpro
http://itpro.nikkeibp.co.jp/article/Windows/2005 …
DOSコマンド一覧
http://hisa-net.ddo.jp/php/dos/dos_command.php#if


またその上で、「IF /?」でヘルプを見ていてはいるのですが
最初の一画面をみてやはり以下の3種しか出てこないことを確認し、
やっぱりそうなのかと判断してしまいました。

IF [NOT] ERRORLEVEL 番号 コマンド
IF [NOT] 文字列1==文字列2 コマンド
IF [NOT] EXIST ファイル名 コマンド

(改めてやってみたら次の画面に記述されていることも確認しました)


・ITproでもあまり信用できない
・ヘルプはきちんと最後まで見るべき
という教訓にもなりました。

大変参考になりました。
ありがとうございました。

お礼日時:2010/04/01 13:00

for でテスト対象を変えるってのはどう? 例えば


for %%X in (0 1 ... F) do if "%INPUT_BG% == "%%X" goto どこか
echo 0~9,A~Fの一文字で入力してください
GOTO :BG
が動けば簡単だね.
    • good
    • 0
この回答へのお礼

教えていただいた方法でやりたいことが実現できました!
ありがとうございました。

このような方法をご教授いただいたということは
普通の言語のように範囲指定やAND条件を使用することは
出来ないということなのですよね…
ちょっと不便さを感じますがそういうものなのですよね。

回避方法が分かったこと、
DOSコマンドのIF文は融通が利かないこと、
等が分かり参考になりました。

ありがとうございました。

お礼日時:2010/03/31 18:31

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています