
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個の入れ子なんか見たくない。
ということでエレガントな書き方を教えてください。
よろしくお願いします。
No.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
------------------------------------------------------------
おおー。いろいろすばらしいです。
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でもあまり信用できない
・ヘルプはきちんと最後まで見るべき
という教訓にもなりました。
大変参考になりました。
ありがとうございました。
No.1
- 回答日時:
for でテスト対象を変えるってのはどう? 例えば
for %%X in (0 1 ... F) do if "%INPUT_BG% == "%%X" goto どこか
echo 0~9,A~Fの一文字で入力してください
GOTO :BG
が動けば簡単だね.
教えていただいた方法でやりたいことが実現できました!
ありがとうございました。
このような方法をご教授いただいたということは
普通の言語のように範囲指定やAND条件を使用することは
出来ないということなのですよね…
ちょっと不便さを感じますがそういうものなのですよね。
回避方法が分かったこと、
DOSコマンドのIF文は融通が利かないこと、
等が分かり参考になりました。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
首吊りどこ締めるの
-
血小板増加について
-
検便についてです。 便は取れた...
-
彼女のことが好きすぎて彼女の...
-
腕を見たら黄色くなってる部分...
-
増減表のプラスマイナスの符号...
-
値が入っているときだけ計算結...
-
2つの数値のうち、数値が小さい...
-
病院側から早く来てくださいと...
-
勃起する時って痛いんですか? ...
-
VLOOKUP関数を使用時、検索する...
-
Excel 数値の前の「 ' 」を一括...
-
風俗店へ行く前のご飯
-
小数点以下を繰り上げたものを...
-
EXCELで式からグラフを描くには?
-
ワードのページ番号をもっと下...
-
精子が黄色?
-
MIN関数で空白セルを無視したい...
-
エクセルで空白セルを含む列の...
-
足がまだら模様になります。ど...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
首吊りどこ締めるの
-
検便についてです。 便は取れた...
-
値が入っているときだけ計算結...
-
彼女のことが好きすぎて彼女の...
-
尿検査前日に自慰行為した時の...
-
VLOOKUP関数を使用時、検索する...
-
Excel 数値の前の「 ' 」を一括...
-
精液の落とし方を教えてください
-
【Excelで「正弦波」のグラフを...
-
2つの数値のうち、数値が小さい...
-
風俗店へ行く前のご飯
-
精子に血が・・・
-
リンク先のファイルを開かなく...
-
小数点以下を繰り上げたものを...
-
EXCELで条件付き書式で空白セル...
-
イタリアから帰国する際、肉製...
-
excelでsin二乗のやり方を教え...
-
腕を見たら黄色くなってる部分...
-
病院側から早く来てくださいと...
-
ワードのページ番号をもっと下...
おすすめ情報