2017-08-23 27 views
0

最初の行(削除したい特定の文字列を含む)以外の特定の文字列を含む行を削除します。Windowsバッチ削除行

findstr /v MyString file.txt > newfile.txt 

私はこのコードを使用して削除しましたが、このようにすべての文字列(また最初の行)を削除します。 どうすればいいですか?

たとえば、これは最初のファイル(file.txtなど)である:

Anna;Mary;sylvia 
1;345;100 
23;34;45 
Anna;Mary;sylvia 
23;54;99 
Anna;Mary;sylvia 
10;23;34 

今私は、この(NEWFILE.TXT)期待:

Anna;Mary;sylvia 
1;345;100 
23;34;45 
23;54;99 
10;23;34 

SOLUTION

をI私の問題の解決策を見つけました。 ここで、このコードの一部:私はヘッダを取り、NEWFILEに書き込む最初の二行で

set /p var=<file.txt 
echo %var% >> newfile.txt 
findstr /v MyString file.txt > newfile2.txt 
type newfile2.txt >> newfile.txt 
del newfile2.txt 

。 3行目では、すべての行をMyStringでクリアし、newfile2.txtに他の行を書き、最後にnewfile2(すべての行で)にnewfile(ヘッダがあるところ)を追加します。

+0

CMDラインを経由して処理するために、ファイルを取得し、あなたがに何_expect_ 'newfile.txt'を見つけ、' newfile.txt'に実際に入っています。 –

+0

OK、編集しました。 –

+0

これはおそらくPowerShellでは簡単ですが、 'CMD'と' FINDSTR'でも管理できます。 [SS64 on 'FINDSTR'](https://ss64.com/nt/findstr.html)と[SS64 on FINDSTR on改行](https://ss64.com/nt/findstr-linebreaks.html)を参照してください。 ) –

答えて

0
@Echo off 
Set File=file.txt 
Set NewFile=NewFile.txt 

Set /P Header=<%File% 
(Echo:%Header% 
Findstr /xlv /C:"%Header%" %File% 
) > %NewFile% 

いくつかの説明と長いバリアントは、ここで明確にするために、あなたはfile.txt` `で見つけるものの例を提供してください

:: Q:\Test\2017\08\23\OneHeader.cmd 
@Echo off 
:: Strip duplicates of the header (first line) from the File passed as argument. 
:: creates a backup File with _bak appended to the name without extension 

If "%~1" equ "" (Echo No File name passed as argument & Pause & exit /B 1) 
If not exist "%~1" (Echo File name %1 not found   & Pause & exit /B 1) 
Set "File=%~1" 
Set "FileBackup=%~dpn1_bak%~x1" 
:: Read first line of File into variable Header 
Set /P Header=<"%File%" 
Move /Y "%File%" "%FileBackup%" 2>NUL 
:: write Header and old content stripped from all headers to output 
(Echo:%Header% 
Findstr /xlv /C:"%Header%" %FileBackup% 
) > "%File%" 
+1

あなたのコードが何をしているか説明してください。それを理解できる人も、自分でそれを書いている可能性があります。 – jpaugh

関連する問題