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

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

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

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

Q&A

解決済

2回答

10835閲覧

Windows バッチ ファイル中身を別ファイルに書き出し

ameagari

総合スコア9

バッチファイル

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

0グッド

0クリップ

投稿2018/07/22 01:08

編集2018/07/22 07:34

お世話になります。

Windowsバッチ(bat)で、テキストファイルやiniファイルの中身を別ファイルに書き出すプログラムを書いているのですが、うまくいきません。

linuxでいう、
cat file.txt > test.txt
をやりたいです。

どこが悪いのか、教えて頂けるとありがたいです。

以下プログラムです。

dos

1set FILE="ファイルパス" 2for /f "usebackq tokens=" %%a in (%FILE%) do (set line = %%a 3echo line >> test.txt)

これを実行すると、FILEのファイルが画面に表示されます。test.txtはできません。

を>に変えても同じ。

初歩的な質問となりますが、よろしくお願いします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

ぼろぼろです。
まず、tokensは1行のうち(区切り文字で区切られた)何番目を取り出すかを指定するので、空にすると何も取り出しません。おそらくtokens=*(全項目取りだし)と間違えたか。
何も取り出されないので、doの後は一度も実行されず、test.txtも出来ません。

FILEのファイルが画面に表示されます。

というのは、勘違いでしょう。

あと、line = %%aと、=の前後に空白が入っているのが間違いです。
これは、line という名前の変数(5文字目空白を含んだ変数名)に、「空白1つの後に取り出した項目を続けたもの」をセットします。
また、%line%とすら書いていないので門前払いですが、forの中で変数の変更される値を参照するには、遅延変数展開が必要です。

DOS

1setlocal enabledelayedexpansion 2if exist test.txt del test.txt 3set FILE="ファイルパス" 4for /f "usebackq tokens=* eol=" %%a in (%FILE%) do (set line=%%a 5echo !line!>>test.txt)

そもそも変数にセットする必要が無くて、

DOS

1set FILE="ファイルパス" 2(for /f "usebackq tokens=* eol=" %%a in (%FILE%) do echo %%a)>text.txt

と直接FOR変数を書けば、遅延変数展開も不要です。
FOR全体をリダイレクトすれば、ファイルをあらかじめ消しておくことも不要です。

また、そもそもですが、copy %FILE% text.txtでいいのでは?
for /fで読むと、空行や、(デフォルトでは);で始まる行が、読み飛ばされます。

投稿2018/07/22 10:52

otn

総合スコア84380

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

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

ameagari

2018/07/22 12:08 編集

回答ありがとうございました。 自分で試行錯誤していたら、出来ましたが、otnさんの回答からたくさん知識がつきました。 スペースを入れてはダメなところがあったりするのですね。 勉強になりました。
guest

0

こっちで実行させようとしたら、

tokens の使い方が誤っています。

のメッセージがでて止まってしましましたね
echoのところまでいってないんじゃないかと。

投稿2018/07/22 03:39

y_waiwai

総合スコア87715

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

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

ameagari

2018/07/22 07:36

申し訳ありません。 プログラムの中の記号が全角であったため、このような結果となっておりました。 半角に変更しましたが、うまくいかず・・・。 お時間ありましたら、ご教授ください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.51%

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

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

質問する

関連した質問