質問: バッチでテキスト読み込みの練習を行っていますが、 下記バッチを実行すると、テキストの内容をすべて読み込めて表示されます。 ``` for /f "delims=" %%a in (string.txt) do echo %%a ``` しかし、下記バッチを実行すると、**ECHOはです。**と表示されて しまいます。%%aで読み込んだものを変数lineに格納しているだけなのですが。 ``` for /f "delims=" %%a in (string.txt) do ( set line=%%a echo %line% ) ```
回答: 多分ですけど、**環境変数に反映されていない**だけでは? 厳密には反映されていると思いますが、私の環境では遅いです。( ちなみに Win10 ) 例えば ``` rem 変数に文字列を設定 set VAR="バッチ、おはよう!" echo %VAR% ``` とすると質問者さんと同様の状態になります。 で、空の状態でもそうなりますし、またC言語とかJavaとかのような変数とは違います。 batでは環境変数っていうのでしょうか? OS側の パスを通すときにある変数項目のやつに追加されるみたいです。 で、その問題に直面したときに訳が分からなかったので set と echo の間に 適当なコマンド ( 例えば不要なsetとか ) を追加して、 ``` rem 変数に文字列を設定 set VAR="バッチ、おはよう!" set DUMMY="ダミーだよ~ん" echo %VAR% ``` とやると見事反映されました。 なんか、反映されるのに時間がかかるみたいです。 多分、マルチタスクですけど、実際には プロセス = ソフト と考えて、 プロセスA の1~2行処理 プロセスB の1~2行処理 プロセスC の1~2行処理 ... みたいになっているのでそれで反映されにくいとかじゃないかなと。