Пакетное удаление строки в текстовом файле? - PullRequest
5 голосов
/ 27 марта 2011

Я дергаюсь за волосы, обнаруживая простой пример пакетного файла DOS, который удалит первую строку из нескольких тысяч текстовых файлов и сохранит файл с исходным именем файла.После пакетного процесса, выполняемого другой программой, мне нужно ДОБАВИТЬ удаленную строку (текстовую строку, состоящую из «X, Y, Z») в начале каждого файла после внешней обработки.

Ответы [ 2 ]

5 голосов
/ 27 марта 2011

Вы можете использовать more +1, чтобы пропустить первую строку файла. Затем вы можете передать его во временный (вы не можете редактировать текстовые файлы на месте):

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

После этого вы можете использовать похожую технику, чтобы заново добавить первую строку:

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

Если вы используете их в пакетном файле, не забудьте удвоить знаки %:

@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"
)

Хорошо, очевидно, more не работает со слишком большими файлами, что меня удивляет. В качестве альтернативы, которая должна работать, если ваш файл не содержит пустых строк (хотя он выглядит как CSV из того, что я собрал):

for %%x in (*.txt) do (
    for /f "skip=1 delims=" %%l in ("%%x") do (>>tmp echo.%%l)
    move /y tmp "%%x"
)
0 голосов
/ 27 марта 2011

Вот моя версия.

@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"
)
...