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

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

ただいまの
回答率

90.51%

  • バッチファイル

    223questions

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

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

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 183

ameagari

score 1

お世話になります。

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

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

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

以下プログラムです。

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

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

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

0

ぼろぼろです。
まず、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で読むと、空行や、(デフォルトでは);で始まる行が、読み飛ばされます。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/07/22 21:07 編集

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

    キャンセル

0

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/07/22 16:36

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

    キャンセル

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

  • ただいまの回答率 90.51%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • バッチファイル

    223questions

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