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で質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) 物理の斜方投射で目盛りに数値を入れたい 2 2023/05/27 06:32
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- UNIX・Linux 次の要件を満たすにはどのように修正したらよろしいでしょうか 1 2022/11/24 20:57
- Visual Basic(VBA) vbaのループ処理について 6 2022/05/06 15:35
- その他(プログラミング・Web制作) Pythonでのかんたんな物理シミュレーションについての書籍 5 2023/06/02 07:37
- その他(プログラミング・Web制作) 物理の斜方投射の目盛り線とx軸、y軸の追加について 3 2023/05/26 21:11
- その他(プログラミング・Web制作) 単純なコマンドプロンプトが動きません。 2 2022/04/19 15:21
- その他(プログラミング・Web制作) プログラミング python 3 2023/06/14 03:55
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
首吊りどこ締めるの
-
白血球が多いとどんな心配があ...
-
彼女のことが好きすぎて彼女の...
-
検便についてです。 便は取れた...
-
ある範囲のセルから任意の値を...
-
精液の落とし方を教えてください
-
勃起する時って痛いんですか? ...
-
精子が黄色?
-
2つの数値のうち、数値が小さい...
-
値が入っているときだけ計算結...
-
小数点以下を繰り上げたものを...
-
EXCELで条件付き書式で空白セル...
-
アクエリアスが苦く感じる
-
Excelで""で囲む方法
-
Excel 0目標に対して数字があ...
-
甲状腺が腫れているが血液検査...
-
これって喉仏ですか? 私は女性...
-
電動のネッククーラーは空港の...
-
エクセルのラベルの値(文字列...
-
リンク先のファイルを開かなく...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
首吊りどこ締めるの
-
白血球が多いとどんな心配があ...
-
検便についてです。 便は取れた...
-
勃起する時って痛いんですか? ...
-
彼女のことが好きすぎて彼女の...
-
腕を見たら黄色くなってる部分...
-
精子が黄色?
-
EXCELで条件付き書式で空白セル...
-
至急!尿検査前日にオナニーし...
-
これって喉仏ですか? 私は女性...
-
中出しをするとお腹が痛い・・・。
-
甲状腺が腫れているが血液検査...
-
2つの数値のうち、数値が小さい...
-
尿検査前日に自慰行為した時の...
-
EXCELで式からグラフを描くには?
-
小数点以下を繰り上げたものを...
-
ある範囲のセルから任意の値を...
-
口の中に黒い血の塊
-
【Excelで「正弦波」のグラフを...
-
エクセル指定した範囲からラン...
おすすめ情報