2016-04-11 3 views
1

これまでに私はバッチファイルに入っていましたが、私はそれに戻ってきますが、私の人生にとっては私の好みの方法を見つけることができません。ファイルからテキストの行を取得バッチファイルの複数の行を読む方法 "("

のそれは、このようなことを行ってきました:

(
set /p %var1%= 
set /p %var2%= 
)>textfile.txt 

ありがとうございましたあなたは、ファイルから読み取るしようとしている:-)

+0

OPは「データファイルをどのように読み取るのですか」と質問していないので、この質問は重複としてマークされているはずはないと思いますか?彼は「どのようにデータファイル*をリダイレクト*で読むのですか?これは大きな違いです。 – rojo

+0

OPでは、 'set/P'をループしてリダイレクトで行を読むことができます。例: ' rojo

+2

'set/p var ='(パーセント記号なし)で、テキストファイルから読み込みたいので、 '<', not '> ' – Stephan

答えて

1

おっとを。!それに書き込まないでください。したがって<が必要で、>ではありません。

また、変数を定義するときではなく、変数を展開するときにパーセントを使用します。

最後に、空の行を読み取ると既存の変数値が保持されるため、読み込む前に明示的に事前値を定義解除する必要があります。

(
    set "var1=" 
    set /p "var1=" 
    set "var2=" 
    set /p "var2=" 
) <textfile.txt 

ロホは彼のコメントで述べたように、あなたは行の任意の数を読んでいる場合は、配列の概念を使用したほうが良いかもしれません。ただし、最初に読み取る行の合計数を決定する必要があります。 SETを使用して

@echo off 
setlocal enableDelayedExpansion 

:: Determine number of lines 
for /f %%N in ('find /c /v "" <textfile.txt') do set "cnt=%%N" 

:: Read the file into an array 
<textfile.txt (
    for /l %%N in (1 1 %cnt%) do (
    set "str.%%N=" 
    set /p "str.%%N=" 
) 
) 

:: Display the array values 
for /l %%N in (1 1 %cnt%) do echo(!str.%%N!) 

/Pは、変数にファイルを読み込むための最速の方法です、と遅延拡張が有効になっている場合には、空行に関するFOR/Fの問題を回避し、!が破損しています。しかし、SET/Pは、独自の制限があります。ソース・ファイル内の

  • 行は、すべての行が長い
  • 末尾< = 1021バイトである必要があります\ Rの\ nを(キャリッジリターンとラインフィード)
  • で終了する必要があります制御文字が行から削除される
+0

ありがとう!これは私が欲しかったものです。 – george

関連する問題