Как указано в заголовке, мне нужен командный файл, чтобы удалить ПЕРВЫЕ 3 строки текстового файла.
Например:
A
B
C
D
E
F
G
в этом примере мне нужно удалить A, B и C вместе со строкой
Как указано в заголовке, мне нужен командный файл, чтобы удалить ПЕРВЫЕ 3 строки текстового файла.
Например:
A
B
C
D
E
F
G
в этом примере мне нужно удалить 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
Это воссоздает файл с удаленными первыми 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
Надеюсь это поможет.
"
в имени файла в цикле for
, попробуйте сейчас.
- person Bali C; 11.07.2012
delims
, поэтому он ломался, когда попадал в пробел. Попробуй сейчас.
- person Bali C; 11.07.2012
*
символа. Он удалит строки, начинающиеся с ;
. Он удалит пустые строки. Есть способы устранить проблемы, но есть более простое решение, используя БОЛЬШЕ
- person dbenham; 11.07.2012
msgbox"Hello kriegy!"
или wscript.echo("Hello")
- person Bali C; 11.07.2012
echo Done
и pause >nul
в конце, чтобы они знали, что это сделано, и могли просто закрыть его.
- person Bali C; 11.07.2012
more +3 "file.txt" >"file.txt.new"
move /y "file.txt.new" "file.txt" >nul
Вышеупомянутое выполняется быстро и отлично работает со следующими ограничениями:
Следующее решение, использующее 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-й строки (Изменить: только если вы используете Un * x :)
$ sed -e '4,$p' in.txt
Я использую команду "more" для вывода файла после команды n-й строки (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%
Вы можете пропустить или закрыть строку плоского файла без каких-либо дополнительных утилит.