7

バッチを使用してテキストファイルから各行を読み取ろうとしています。

ファイル内の行にはいくつかの空白スペースがあるため、これは入力の例です。

This is the first line
This is the second line
...

私は次のソースコードを使用しています

FOR /f %%a in ("%1") do (
    @echo %%a
)
goto:eof

出力は次のとおりです。

This
This
...

Stack Overflowで次のエントリを読みましたが、問題が解決しません。 バッチ:パスにスペースがあるファイルから行を読み取ります

4

3 に答える 3

12

これを試して。

FOR /f "tokens=* delims=,"  %%a in ('type "%1"') do (
    @echo %%a
)
于 2012-10-22T14:54:20.310 に答える
6

バリCとヘンリーガオはこの問題を回避しています。

FOR / Fは文字列を区切られたトークンに解析するように設計されているため、コードは1番目のスペースで値を終了しています。デフォルトの区切り文字はスペースとタブです。DELIMSをnoに設定すると、行全体を保持できます。

for /f "usebackq delims=" %%a in ("%~1") do echo %%a

ただし、まだ潜在的な問題があります。FOR/ Fループは空の行をスキップし、EOL文字で始まる行もスキップします(;デフォルト)。

FORコマンド(特にFOR / Fバリアント)は複雑な獣です。FORコマンドの隅々までの概要については、http://judago.webs.com/batchforloops.htmを読むことをお勧めします。

于 2012-10-22T15:37:48.607 に答える
2

バッチが各行で読み取る場所の区切り文字を設定する必要があります

FOR /f "delims=;" %%a in ("%1") do (
    @echo %%a
)

行末のデフォルトの区切り文字はセミコロンです。~または、ファイルに表示されない可能性のある文字を使用します¬

于 2012-10-22T15:02:56.280 に答える