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

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

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

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

Q&A

解決済

1回答

1983閲覧

バッチファイルの改行が反映されない

sf213471118

総合スコア7

バッチファイル

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

0グッド

0クリップ

投稿2023/07/10 14:11

実現したいこと

別で読み込んだテキストファイルを1行ずつ読み込み変数へ格納する際、改行を含めて格納したいです。

前提

Windowsのバッチファイルを作成しております。
同階層のテキストファイルを読込み、1つの変数に格納する処理を記述しています。

発生している問題・エラーメッセージ

改行されないばかりか、set str= まで全て表示されてしまいます。

set str=aaaaaaaaaaaaaaaaaaaset str=bbbbbbbbbbbbbbbbbset str=cccccccccccccset str=ddddddddddset str=eeeeeeeeset str=ffffffset str=ggggggggggggggggggg

該当のソースコード

test.bat

1@echo off 2SETLOCAL ENABLEDELAYEDEXPANSION 3 4set msgpath=test.txt 5set lf=^ 6set str= 7for /f %%a in (!msgpath!) do ( 8 set str=!str!!lf!%%a 9) 10

test.text

1aaaaaaaaaaaaaaaaaaa 2bbbbbbbbbbbbbbbbb 3ccccccccccccc 4dddddddddd 5eeeeeeee 6 7ffffff 8ggggggggggggggggggg

試したこと

改行「^」を変数ではなく直打ちしたが上手くいきませんでした。

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

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

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

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

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

guest

回答1

0

ベストアンサー

デバッグ中は、echo offを止めると良いです。というか、echo offは完成してから書きます。

CMD

1set lf=^ 2set str=

は、^の後の改行が無視されて、

CMD

1set lf=set str=

と書いたのと同じです。つまりlfset str=という文字列が代入されるので、そういう結果になります。
改行を入れるためには、

CMD

1set lf=^ 2 3 4set str=

と空行を2行入れます。おそらく2行目と3行目の間の改行が入る。
改行を2つ入れたいときは、

CMD

1set lf=^ 2 3^ 4 5 6set str=

これは2行目と3行目の間の改行、4行目と5行目の間の改行が入るんだと思います。

なお、for /fで空行は読み取れないので、test.txtの6行目はスキップされます。

投稿2023/07/10 15:00

otn

総合スコア86281

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

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

otn

2023/07/10 15:21

もしかして、^ を改行を意味する記号だと思っていたのでしょうか? ^ は、多くの言語の \ と同じで、次の文字の特殊な意味を失わせます。 echo aaa >bbb だと、ファイル bbb へのリダイレクトで「aaa」という文字列を書き込む echo aaa ^>bbb だと > がリダイレクトの意味を失って、「aaa >bbb」という文字列を表示。 行末に ^ を書くと行が継続します。
sf213471118

2023/07/11 02:11

otn様 お知恵をいただきありがとうございます。 仰る通り ^ を改行で使用するものと勘違いしておりました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問