MGreen
@MGreen (M Green)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

Windows batch, 遅延環境変数の必要性は、PC環境によって異なるか?

以前「WindowsのBatchファイルでIf文を組んだら、Trueに行くはずがFaulseになってしまい条件通りにならない」という問題についてQiitaで質問したところ、「遅延環境変数」を設定することで解決したということがありました。
https://qiita.com/MGreen/questions/0674a2754662189e5114#answer-comment-ddbd2a4d0127b65029ec

問題は解決したものの、ひとつ疑問が残っています。
というのも、Qiitaやリアルの先輩方に、同じコマンドを皆さんのPC上で動かしてもらったのですが、遅延環境変数を設定しなくても大丈夫な方とそうでない方がいました。
遅延環境変数設定必要:2名 (OS: 1名 win10 enterprise, 1名: 不明)
設定不要:2名 (OS: 1名 win11 pro, 1名: win10 enterprise)

ここで質問なのですが、遅延環境変数を設定しないと影響があるかないかというのは、パソコンによって違うのでしょうか。

遅延環境変数というのはBatchとかWindowsの中で最も「不可解」な部類のものだという情報もいくつか見つけましたので、なかなかはっきりわかる方はいない気もしますが、質問させていただきます。

何か知見がある方がいらっしゃいましたら、ご教示いただけると幸いです。

0

1Answer

遅延環境変数を設定しないと影響があるかないかというのは、パソコンによって違うのでしょうか。

自分の環境 Windows 10 Pro 64-bit 22H2 19045.5011 では @M-Y-Y さんが指摘されたようにしないと(遅延環境変数設定をしないと)ダメでした。

先のスレッドのコードを以下のように簡略化して試すと、

@echo off

if /i "manual"=="manual" (
    echo change to Auto mode? (y/n^) 
    set /p choice=
    if /i "%choice%"=="y" ( 
        echo "%choice%"
        echo Changed to Auto mode.
        echo to finish this command, please type any key.
        pause > nul
        exit /b
    ) else (
        echo "%choice%"
        echo mode is not changed, still "Manual".
        echo to finish this command, please type any key.
        pause > nul
        exit /b
    )
)

以下のようになります。つまり、if /i "%choice%"=="y" ( ... ) の choice は初回は空白、それ以降は前回の入力になります。

test2.jpg

遅延環境変数を設定しなくても大丈夫な方とそうでない方がいました。

とのことですが、そこは自分の今の環境では検証しようがないので分かりません。

(上記の動作が OS によって異なるのは個人的には考えにくいのですが・・・)

1Like

Comments

  1. 改めて確認しました。(Windows11 Pro 64bit 24H2 26100.2033)
    @SurferOnWww さんのご指摘のとおり、「if /i "%choice%"=="y" ( ... ) の choice は初回は空白、それ以降は前回の入力」になりました。
    前回のQ&Aで、何度かバッチを繰り返し実行したので、「前回の入力」と一致した入力であったことに気付かずにいたのが原因だと思います。
    前回のQ&Aでの誤回答をお詫びいたします。> @MGreen さん
    @SurferOnWww さん、ご指摘ありがとうございました。

  2. @MGreen

    Questioner

    @SurferOnWww さん、@nak435 さん、ありがとうございます!肝心の質問した私が手元で再確認できておらず大変申し訳ないのですが、「初回はchoiceコマンドへの入力値が空白になってしまい、2回目からは前回の値が入ってしまう」ということがよく理解できました。(前回の@M-Y-Yさんもそのような投稿でした)
    リアルの先輩も何度かコマンドを打っていたので、「なぜか動く」という状態だったのだと思います。 

    よって「(おそらく)遅延環境変数の必要性は、環境によらない」との理解で、クローズします!難しいトピックだったので、誠にありがとうございました!!

Your answer might help someone💌