
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も見ています
-
コマンドプロンプトで変数が数字であることを判定する方法
その他(プログラミング・Web制作)
-
バッチでテキストファイルから任意の行のみ取得したい
その他(プログラミング・Web制作)
-
batである文字列内に特定の文字列が含まれているか確認したい
その他(プログラミング・Web制作)
-
-
4
コマンドプロンプトの「%1」と「%~1」の違いがわからない
その他(プログラミング・Web制作)
-
5
バッチ処理でファイルの中身を変数に入れるやり方
その他(プログラミング・Web制作)
-
6
コマンドプロンプトで表示が多いと初めが表示できない
その他(コンピューター・テクノロジー)
-
7
Windowsのバッチファイルで正規表現の置換方法について…
Windows 10
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
首吊りどこ締めるの
-
彼女のことが好きすぎて彼女の...
-
風俗店へ行く前のご飯
-
検便についてです。 便は取れた...
-
尿検査前日に自慰行為した時の...
-
イタリアから帰国する際、肉製...
-
勃起する時って痛いんですか? ...
-
精子に血が・・・
-
EXCELで式からグラフを描くには?
-
ボタン電池の付いていないマザ...
-
至急です。 今日アルバイト中に...
-
納豆食べた後の尿の納豆臭は何故?
-
エクセルで空白セルを含む列の...
-
ある範囲のセルから任意の値を...
-
病院側から早く来てくださいと...
-
最近、飲酒すると手のひらが真...
-
【Excelで「正弦波」のグラフを...
-
Excel関数:本日以降(以前)の...
-
値が入っているときだけ計算結...
-
四字熟語で“検”の字が入る四字...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
首吊りどこ締めるの
-
彼女のことが好きすぎて彼女の...
-
イタリアから帰国する際、肉製...
-
2つの数値のうち、数値が小さい...
-
健否~書類の書き方~
-
VLOOKUP関数を使用時、検索する...
-
値が入っているときだけ計算結...
-
小数点以下を繰り上げたものを...
-
エクセルで空白セルを含む列の...
-
EXCELで条件付き書式で空白セル...
-
リンク先のファイルを開かなく...
-
ある範囲のセルから任意の値を...
-
精子に血が・・・
-
エクセルで数式の答えを数値と...
-
風俗店へ行く前のご飯
-
エクセル指定した範囲からラン...
-
一番多く表示のある値(文字列...
-
Excel 数値の前の「 ' 」を一括...
-
ワードのページ番号をもっと下...
-
MIN関数で空白セルを無視したい...
おすすめ情報