Пакетный файл для удаления первых 3 строк текстового файла

Как гласит заголовок, мне нужен командный файл, чтобы удалить первые 3 строки текстового файла.

например:

A    
B    
C    
D    
E   
F    
G

в этом примере мне нужно удалить A, B и C вместе со строкой

 Arun Jain11 июл. 2012 г., 10:46
[Смотрите эту ссылку] [1]. Надеюсь, это сработает для вас. [1]:stackoverflow.com/questions/418916/…
 kriegy11 июл. 2012 г., 11:18
Арун Джайн, это работает, только если ты знаешь, что в строке, я не '

Ответы на вопрос(5)

Решение Вопроса

Это должно сделать это

for /f "skip=3 delims=*" %%a in (C:\file.txt) do (
echo %%a >>C:\newfile.txt    
)
xcopy C:\newfile.txt C:\file.txt /y
del C:\newfile.txt /f /q

Это создаст файл заново с удалением первых 3 строк.

Чтобы держать пользователя в курсе, вы можете интегрировать сообщения в пакетном файле в стиле vbscript или выводить сообщения в командной строке.

@echo off
echo Removing...
for /f "skip=3 delims=*" %%a in (C:\file.txt) do (
echo %%a >>C:\newfile.txt
) >nul
echo Lines removed, rebuilding file...
xcopy C:\newfile.txt C:\file.txt /y >nul
echo File rebuilt, removing temporary files
del C:\newfile.txt /f /q >nul
msg * Done!
exit >nul

Надеюсь это поможет.

 kriegy11 июл. 2012 г., 13:35
это заняло у нас некоторое время, но мы добились этого, спасибо, я собираюсь задать еще один вопрос, который касается заявлений ...
 11 июл. 2012 г., 13:28
Извините, я не смог проверить код, когда опубликовал его. Я отредактировал это снова и проверил это время, и это работает. Я забылdelims так что он ломался, когда попадал в пространство. Попробуй сейчас.
 kriegy11 июл. 2012 г., 13:11
хорошо, что вернул первое слово в последних 3 строках
 kriegy11 июл. 2012 г., 11:09
Кажется, я столкнулся с ошибкой & gt; & gt; в это время был неожиданным & quot;
 11 июл. 2012 г., 11:16
Извините, была опечатка, я поставил" войдите в имя файла вfor цикл, попробуйте сейчас.

Используйте sed только для печати, начиная с 4-й строки (Edit: Только если вы используете Un * x :)

$ sed -e '4,$p' in.txt 
 kriegy11 июл. 2012 г., 11:16
Я предпочитаю оставить все как есть, так как я могу распространить пару копий, спасибо, хотя
 12 июл. 2012 г., 09:06
Если я читаю ответы, которые используют только пакет, я рекомендую сделать это :)
 11 июл. 2012 г., 11:54
Этот вопрос помечен какbatch, Вы должны получитьSed for windows заставить это работать.
more +3 "file.txt" >"file.txt.new"
move /y "file.txt.new" "file.txt" >nul

Выше приведен быстрый и отлично работает со следующими ограничениями:

TAB characters are converted into a series of spaces. The number of lines to be preserved must be less than ~65535. MORE will hang, (wait for a key press), if the line number is exceeded. All lines will be terminated by carriage return and linefeed, regardless how they were formatted in the source.

Следующее решение, использующее FOR / F с FINDSTR, более устойчиво, но намного медленнее. В отличие от простого решения FOR / F, оно сохраняет пустые строки. Но, как и во всех решениях FOR / F, он ограничен максимальной длиной строки чуть менее 8191 байта. Опять же, все строки будут завершены возвратом каретки и переводом строки.

@echo off
setlocal disableDelayedExpsnsion
>"file.txt.new" (
  for /f "delims=" %%A in ('findstr /n "^" "file.txt"') do (
    set "ln=%%A"
    setlocal enableDelayedExpansion
    echo(!ln:*::=!
    endlocal
  )
)
move /y "file.txt.new" "file.txt" >nul

Если у вас есть мой умникJREPL.BAT regex утилита для обработки текстаТогда вы можете использовать следующее для очень надежного и быстрого решения. Это все еще приведет к завершению всех строк с возвратом каретки и переводом строки (\ r \ n), независимо от исходного формата.

jrepl "^" "" /k 0 /exc 1:3 /f "test.txt" /o -

Вы можете написать \ n терминаторы строки вместо \ r \ n, добавив/U вариант.

Если вам необходимо сохранить исходные ограничители строки, вы можете использовать следующий вариант. Это загружает весь исходный файл в одну переменную JScript, поэтому общий размер файла ограничен примерно 1 или 2 гигабайтами (я забыл точное число).

jrepl "(?:.*\n){1,3}([\s\S]*)" "$1" /m /f "test.txt" /o -

Помните, что JREPL является пакетным файлом, поэтому вы должны использовать CALL JREPL, если вы используете команду в другом пакетном скрипте.

 kriegy11 июл. 2012 г., 16:22
не волнуйтесь, я решил это
 kriegy11 июл. 2012 г., 14:56
стоит ли иметь графический интерфейс vbscript msgbox?
 29 февр. 2016 г., 14:24
РЕДАКТИРОВАТЬ - Добавлено более надежное, но медленное решение FOR / F, а также быстрые и надежные решения JREPL.BAT.

Если вы хотите пропустить первые и завершить последние строки, вы можете использовать мой код на http://www.harchut.de/download/ms-dos/skip-tail-flatfile-example.zip

set L_TRIMFILE_CNT=0
set L_TRIMFILE_TMPFILE=work.countrows.find.tmp
find /c /v "" %P_TRIMFILE_INFILE% > %L_TRIMFILE_TMPFILE%
for /f "skip=1 tokens=3* " %%a in (%L_TRIMFILE_TMPFILE%) do (
  if %L_TRIMFILE_CNT% == 0 set L_TRIMFILE_CNT=%%a
)
del %L_TRIMFILE_TMPFILE%
set /a L_TRIMFILE_EOF=%L_TRIMFILE_CNT%-%P_TRIMFILE_TAIL%
findstr /n .* "%P_TRIMFILE_INFILE%" > %L_TRIMFILE_TMPFILE%
if exist %P_TRIMFILE_OUTFILE% del %P_TRIMFILE_OUTFILE%
set V_TRIMFILE_SKIP="skip=%P_TRIMFILE_SKIP% tokens=1* delims=:"
if %P_TRIMFILE_SKIP% equ 0 set V_TRIMFILE_SKIP="tokens=1* delims=:"
for /f %V_TRIMFILE_SKIP% %%a in (%L_TRIMFILE_TMPFILE%) do (
  if %%a leq %L_TRIMFILE_EOF% if exist %P_TRIMFILE_OUTFILE% @echo.%%b>>%P_TRIMFILE_OUTFILE%
  if %%a leq %L_TRIMFILE_EOF% if not exist %P_TRIMFILE_OUTFILE% @echo.%%b>%P_TRIMFILE_OUTFILE%
)
del %L_TRIMFILE_TMPFILE%

Вы можете пропустить или завершить линию плоского файла без какой-либо дополнительной утилиты.

 22 мая 2015 г., 15:50
Вы можете добавить небольшое объяснение этого ответа. Всегда лучше дать человеку удочку, чем дать ему рыбу.

Я использую & quot; больше & quot; команда для вывода файла после n-й строки Команда (окна)

More +n orginalfilename.txt > outputfilename.txt

Описание:     Вывод файла txt после n-й строки

Ваш ответ на вопрос