web-dev-qa-db-ja.com

Windowsバッチファイルでテキストファイルに新しい行を追加する

200行を超えるテキストファイルがあり、4行目の前に新しい行を追加したいだけです。WindowsXPを使用しています。

入力前のテキストファイルの例:

header 1
header 2
header 3
details 1
details 2

出力後:

header 1
header 2
header 3
<----- This is new line ---->
details 1
details 2
21
newbie18

私はあなたが使用していると信じています

echo Text >> Example.txt 

関数?

その場合、答えは単に「。」を追加することです。 (ドット)エコーの直後に、他に何もありません。

例:

echo Blah
echo Blah 2
echo. #New line is added
echo Next Blah
24
avitex

次を使用できます。

type text1.txt >> combine.txt
echo >> combine.txt
type text2.txt >> combine.txt

またはこのようなもの:

echo blah >> combine.txt
echo blah2 >> combine.txt
echo >> combine.txt
echo other >> combine.txt
3
khaled

免責事項:以下のソリューションでは、末尾のタブは保持されません。


テキストファイルの正確な行数がわかっている場合は、次の方法を試してください。

@ECHO OFF
SET origfile=original file
SET tempfile=temporary file
SET insertbefore=4
SET totallines=200
<%origfile% (FOR /L %%i IN (1,1,%totallines%) DO (
  SETLOCAL EnableDelayedExpansion
  SET /P L=
  IF %%i==%insertbefore% ECHO(
  ECHO(!L!
  ENDLOCAL
)
) >%tempfile%
COPY /Y %tempfile% %origfile% >NUL
DEL %tempfile%

ループは、元のファイルから行を1つずつ読み取り、出力します。出力は一時ファイルにリダイレクトされます。特定の行に到達すると、その前に空の行が出力されます。

終了後、元のファイルは削除され、一時ファイルに元の名前が割り当てられます。


[〜#〜] update [〜#〜]

行数が事前に不明な場合は、次の方法を使用して取得できます。

FOR /F %%C IN ('FIND /C /V "" ^<%origfile%') DO SET totallines=%%C

(この行は、単にSET totallines=200上記のスクリプトの行。)

このメソッドには小さな欠点が1つあります。ファイルが空の行で終わる場合、結果は実際の行数から1を引いたものになります。回避策が必要な場合(または単に安全にプレイしたい場合)、 this answer で説明されている方法を使用できます。

1
Andriy M