5 Stimmen

Stapelweise eine Zeile in einer Textdatei löschen?

Ich suche verzweifelt nach einem einfachen Beispiel für eine DOS-Batch-Datei, die die erste Zeile von mehreren tausend txt-Dateien löscht und die Datei unter dem ursprünglichen Dateinamen speichert. Im Anschluss an einen Stapelverarbeitungsprozess, der von einem anderen Programm ausgeführt wird, muss ich dann die gelöschte Zeile (eine Textzeichenfolge, die aus "X,Y,Z" besteht) an den Anfang jeder Datei nach der externen Verarbeitung einfügen.

5voto

Joey Punkte 329386

Sie können verwenden more +1 um die erste Zeile der Datei zu überspringen. Dann können Sie die Datei in eine temporäre Datei übertragen (Sie können Textdateien nicht an Ort und Stelle bearbeiten):

for %x in (*.txt) do (more +1 "%x">tmp & move /y tmp "%x")

Danach können Sie auf ähnliche Weise die erste Zeile wieder einfügen:

for %x in (*.txt) do ((echo X,Y,Z& type "%x")>tmp & move /y tmp "%x")

Wenn Sie diese in einer Batch-Datei verwenden, denken Sie daran, die % Zeichen:

@echo off
for %%x in (*.txt) do (
    more +1 "%%x" >tmp
    move /y tmp "%%x"
)
rem Run your utility here
for %%x in (*.txt) do (
    echo X,Y,Z>tmp
    type "%%x" >>tmp
    move /y tmp "%%x"
)

Ok, anscheinend more funktioniert nicht mit zu großen Dateien, was mich überrascht. Als Alternative, die funktionieren sollte, wenn Ihre Datei keine Leerzeilen enthält (obwohl es aussieht wie CSV von dem, was ich gesammelt habe):

for %%x in (*.txt) do (
    for /f "skip=1 delims=" %%l in ("%%x") do (>>tmp echo.%%l)
    move /y tmp "%%x"
)

0voto

adarshr Punkte 59219

Hier ist meine Version.

@echo off

for /f "usebackq delims=" %%f in (`dir /b *.txt`) do (
    echo X, Y, Z>"tmp.txt"
    type "%%f" >> tmp.txt
    move tmp.txt "%%f"
)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X