質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

Q&A

解決済

1回答

5909閲覧

bat 数値比較が8と9だけうまくいかない

zon

総合スコア13

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

0グッド

1クリップ

投稿2021/08/23 12:50

batである製品起動時に読み込む設定ファイルを変更する処理を作成しています。
その中で、メニューを表示させて、利用者に入力させています。
<イメージ>
01 メニュー1
02 メニュー2
03 メニュー3
04 メニュー4
05 メニュー5
06 メニュー6
07 メニュー7
08 メニュー8
09 メニュー9
10 メニュー10
選択したい番号を入力してください:

テストの際、入力文字を二けたとした場合、08と09で異常な処理が行われました。数値比較しているif文がどうも正しく判定していないところまで解析しました。普通に以下コマンドをコマンドプロンプトで実施したところ、意図しない結果となっています。念のため、複数のPCで確認しましたが、同じ結果でした。これは、コマンドプロンプトの仕様ということなんでしょうか。正しく判定されるように改善する方法が知りたいです。

if 6 equ 06 (echo OK) else (echo NG)

OK

if 7 equ 07 (echo OK) else (echo NG)

OK

if 8 equ 08 (echo OK) else (echo NG)

NG

if 9 equ 09 (echo OK) else (echo NG)

NG
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takasima20

2021/08/23 13:21

そもそもメニューに 0n 表示しなかったら発生しない問題じゃね?
V1489-Cygni

2021/08/23 14:55

0が頭に付くと、8進数扱いになります。8進数には、 8 や 9 という文字は存在しない。 演算子 equ は、比較対象が数値なら、数値で、そうでないなら、文字列として比較します。 ・・・で、 08 , 09 は、文字列として比較されているのでしょう。 0は、無理に付けなくても良いのでは・・・?
zon

2021/08/24 03:52

確かにおっしゃる通りです。 今のままでは、エラーになってしまうので、数値として比較できるようにできればしたいと思います。頭が0なら再入力とするのもありですが。
guest

回答1

0

ベストアンサー

コマンドプロンプトで数値を書くことのできるところで0xで始まれば16進の数値定数、0で始まれば8進の数値定数として解釈されます。

(追記)

回避策

set n=08 set /a nn=1%n%-100

set /a nn=108-100 となってnnはめでたく8となります。

回避策2

set n=08 set /a nn=1%n%*2-2%n%

これでnの桁数によらず左のゼロを除去でき、n=8でもn=08でもn=008でもnn=8となります。

投稿2021/08/23 13:04

編集2021/08/24 03:59
itagagaki

総合スコア8402

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

zon

2021/08/24 03:49

ありがとうございます。 インプットが8でも08でも数字で扱えるようにできる方法はないでしょうか。
itagagaki

2021/08/24 03:59

回答に追記しました。
zon

2021/09/03 21:05

たすかりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問