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

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

например:

ABCDEFG 

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

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

 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 

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

Чтобы обновить пользователя, вы можете интегрировать сообщения в пакетный файл в стиле 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 

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

 more +3 "file.txt" >"file.txt.new" move /y "file.txt.new" "file.txt" >nul 

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

  • Символы TAB преобразуются в ряд пробелов.
  • Количество сохраняемых линий должно быть меньше ~ 65535. MORE будет зависать (дождитесь нажатия клавиши), если номер строки превышен.
  • Все строки будут завершены возвратом каретки и переводом строки, независимо от того, как они были отформатированы в источнике.

Следующее решение, использующее 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 , вы можете использовать следующее для очень надежного и быстрого решения. Это все равно приведет к завершению всех строк с возвратом каретки и возвратом строки (\ 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, если вы используете команду в другом пакетном скрипте.

Используйте sed, чтобы печатать только с 4-й строки ( Edit: Only, если вы используете Un * x 🙂

 $ sed -e '4,$p' in.txt 

Я использую команду «больше» для вывода файла после n-й строки Command (windows)

 More +n orginalfilename.txt > outputfilename.txt 

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

Если вы хотите пропустить первый и хвост последних строк, вы можете использовать мой код по адресу 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% 

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

Давайте будем гением компьютера.