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

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

新規登録して質問してみよう
ただいま回答率
85.34%
バッチファイル

バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。

Q&A

解決済

2回答

355閲覧

batファイルにて空白である変数を使用してif文を書くとプログラムが動かない。

assemble

総合スコア8

バッチファイル

バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。

0グッド

0クリップ

投稿2024/12/04 07:47

実現したいこと

ソースコードにあるように空白でなかった場合に処理を行うif文を使用したいです。

発生している問題・分からないこと

変数が空白の際にプログラムが動作しなくなってしまうのですが、どのように対処したらよいでしょうか。
例)AAA=on の場合、「fin」と表示される
AAA= の場合(AAAが空白)、「fin」も表示されない → プログラムが動かない
将来的に上記機能を使うプログラムでは変数が空白になることが多いので、そもそも空白を用いないという解決策以外で教えていただければと思います。

該当のソースコード

bat

1@echo off 2setlacal enablededelayedexpansion 3 4set AAA= 5 6if %AAA%="" ( 7 echo OK 8) 9 10echo fin 11pause

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

対処法は見つかりませんでした。

補足

特になし

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

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

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

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

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

kikukiku

2024/12/04 08:26

下記でできそうです。 rem set AAA="aa bb" rem set AAA=aa set AAA= if [%AAA%]==[] ( echo OK ) else ( echo fin )
guest

回答2

0

if %AAA%="" (

何重にも間違っているような・・

bat

1if "%AAA%"=="" (

投稿2024/12/04 08:28

yambejp

総合スコア116921

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

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

0

ベストアンサー

「等しい」という演算子は=じゃなくて==です。Cなど多くの言語と同じ。

まず演算子を正しくして、その上で、%AAA%を展開すると、
if =="" (という行になりますが、==の左辺に何も書いてないので文法エラーです。
右辺に引用符を書いたのになぜ左辺に引用符を書かなかったのか?

AAAに、空以外に何が入り得るのか?ということにも依存しますが、
if "%AAA%"=="" (
が普通です。(AAAに奇数個の"が含まれる場合はこれでは駄目)

AAAに入り得る文字の種類によっては、
if X%AAA%==X (
という方法で、左項・右項が空になるのを避ける手もありますが、最近はあまり見ないですね。

投稿2024/12/04 11:50

otn

総合スコア85989

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

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

assemble

2024/12/05 00:04

ご回答ありがとうございました。 ==に関してはソースコードの記入ミスでした、失礼いたしました。 引用符に関して、仕様を勘違いしていました ご指摘いただいた方法で解決しました、ありがとうございました。
otn

2024/12/05 15:31

> 引用符に関して、仕様を勘違いしていました @echo offはデバッグが終わってから書きます。 @echo off を書きさえしなければ、 if =="" ( と表示されるので、それを見た時点で仕様の勘違いに気づいて、おそらく自力で解決できたと思います。 以下は自分を成長させたい人向けです。自分の成長を求めてない場合は、読み飛ばしてOKです。 @echo off や setlacal enablededelayedexpansion みたいなのを「おまじないとして書いとけ」みたいな、解説ページがたまにありますが、 プログラミングのような論理的な世界に、「おまじない」は一切存在しないので、 「この記述にはどういう意味があって、書くとどうなって、書かないとどうなる」を理解できてない記述は、理解できるまで書いちゃ駄目です。 どうしても先を急ぐという時はとりあえず理解できないまま書いて先に進んでもいいですが、うまくいかない時はもどってちゃんとやりましょう。うまくいった場合でも、負債(=学ぶべき残件)として記憶してきましょう。
otn

2024/12/05 16:10

あと、回答の蛇足部分に書こうとして忘れてましたがが、 > batファイルにて空白である変数を使用して 6行目の "" の部分の引用符の中は「空白」ではありません。「空」あるいは「空文字列」です。 「空白」だと " " です。 少なくともプログラマーや、仕様の設計者は「空白」と「空」は別物として区別します。
assemble

2024/12/06 02:10

いつも本当にお世話になっております。 細かい部分まで教えていただきありがとうございます。 参考にさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.34%

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

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

質問する

関連した質問