2017-11-02 115 views
-1

1行目を除いてファイルを複製しようとしています。 しかし、内容を正しくコピーできないようです。バッチファイルの空行をスキップしない

これは、私が試した方法です:

for /f "tokens=* skip=1" %%i in (input.txt) do (
    echo %%i >> "output.txt" 
) 

INPUT.TXT私は、この持っている場合:

1. test item1  
2. test item2 
3. test item3 

予想される出力:

test1 

1. test item1 

2. test item2 

3. test item3 

をそれは私にこれを与えます:

1. test item1 

2. test item2 

3. test item3 

どうすればよいですか? for /fでこれを行う方法はありません

答えて

2
@ECHO OFF 
SETLOCAL 
SET "sourcedir=U:\sourcedir" 
SET "destdir=U:\destdir" 
SET "filename1=%sourcedir%\q47067655.txt" 
SET "outfile=%destdir%\outfile.txt" 

(FOR /f "tokens=1*skip=1delims=:" %%a IN ('findstr /n /r ".*" "%filename1%"') DO ECHO(%%b)>"%outfile%1" 
(FOR /f "tokens=1*skip=1delims=]" %%a IN ('find /n /v "" ^<"%filename1%"') DO ECHO(%%b)>"%outfile%2" 
(more +1 "%filename1%">"%outfile%3") 

GOTO :EOF 

sourcedirの設定を状況に合わせて変更する必要があります。 状況に応じてsourcedirdestdirの設定を変更する必要があります。

テスト用にデータが入っているq47067655.txtという名前のファイルを使用しました。

は%の出力ファイルの%として定義されたファイルを生成します*

for /f空行をスキップし、その行はそれらの番号で空になっていないか確認します。echo(%%a%%a

で空行を生成すること

注あなたの例の出力は、skip PED線と次との間の空白行を省略しています。

1

for /?からのドキュメントはかなり頑固です:

空白行はスキップされます。このようなシンプル必要性については

は、それが一定のサイズまで(任意の行で開始することができず、実際にページファイル、それがリダイレクトいます場合、Windows moreプログラム、と会ったことができますとにかく)。率直に言って脳 - (より複雑タスクの場合

c:\users\paxdiablo> more +2 input.txt >output.txt 
c:\users\paxdiablo> type output.txt 
1. test item1 

2. test item2 

3. test item3 

たり、ファイルがmoreがページングなしで扱うことができるものよりも大きいしている場合、あなたはおそらく使用を中止すべきである:それはあなたの全体のスクリプトが単一のコマンドに置き換えることができることを意味します古いWindowsツールを使用し、代わりにPowerShellに切り替えます。 (スクリプトは今、任意の複雑なことができますが、あなたのケースのために)、そのようなあなただけのような何かを行うことができた後sedまたはawkGnuWin32を参照)、として自分自身のWindowsのためのいくつかのまともなテキスト処理ツールを

またはGET:

c:\users\paxdiablo> awk "NR>2{print}" input.txt >output.txt 
+0

'more'コマンドにもフォルトがあります。それは自動的に一時停止し、65534行目でユーザー入力を待つでしょう。 – Squashman

+0

もう一つは、** 'More' **コマンドは常にタブを削除するということです。デフォルトではそれぞれを8つのスペースに置き換えますが、スペースの数は** '/ T' **オプションを使用して変更できます。 – Compo

関連する問題