質問: %%a echo line >> test.txt) ``` これを実行すると、FILEのファイルが画面に表示されます。test.txtはできません。 >>を>に変えても同じ。 初歩的な質問となりますが、よろしくお願いします。
回答: ぼろぼろです。 まず、`tokens`は1行のうち(区切り文字で区切られた)何番目を取り出すかを指定するので、空にすると何も取り出しません。おそらく`tokens=*`(全項目取りだし)と間違えたか。 何も取り出されないので、`do`の後は一度も実行されず、`test.txt`も出来ません。 > > FILEのファイルが画面に表示されます。 > > > というのは、勘違いでしょう。 あと、`line = %%a`と、`=`の前後に空白が入っているのが間違いです。 これは、`line`という名前の変数(5文字目空白を含んだ変数名)に、「空白1つの後に取り出した項目を続けたもの」をセットします。 また、`%line%`とすら書いていないので門前払いですが、`for`の中で変数の変更される値を参照するには、遅延変数展開が必要です。 ``` setlocal enabledelayedexpansion if exist test.txt del test.txt set FILE="ファイルパス" for /f "usebackq tokens=* eol=" %%a in (%FILE%) do (set line=%%a echo !line!>>test.txt) ``` そもそも変数にセットする必要が無くて、 ``` set FILE="ファイルパス" (for /f "usebackq tokens=* eol=" %%a in (%FILE%) do echo %%a)>text.txt ``` と直接FOR変数を書けば、遅延変数展開も不要です。 FOR全体をリダイレクトすれば、ファイルをあらかじめ消しておくことも不要です。 また、そもそもですが、`copy %FILE% text.txt`でいいのでは? `for /f`で読むと、空行や、(デフォルトでは)`;`で始まる行が、読み飛ばされます。