Самый простой подход (при условии, что ваш текстовый файл называется data.txt
):
more +1 "data.txt" > "data_NEW.txt"
Это ограничивает строки длиной около 65535 байт / символов, а файл - около 65535 строк.Кроме того, TABs становятся расширенными до SPACEs (по умолчанию 8).
Вместо этого можно использовать цикл for /F
(опция с нечетными кавычками)Синтаксис строки необходим здесь для того, чтобы отключить eol
символ по умолчанию ;
, чтобы не игнорировать строки, начинающиеся с таких):
@echo off
(
for /F usebackq^ skip^=1^ delims^=^ eol^= %%L in ("data.txt") do echo(%%L
) > "data_NEW.txt"
Это ограничивает строки длиной около 8190 символов / байт и теряетпустые строки.
Вы можете использовать цикл for /F
вместе с findstr
для хранения пустых строк (findstr
добавляет номер строки плюс :
к каждой строке, поэтому for /F
делаетне видеть пустых строк; все, вплоть до (первого) двоеточия, затем удаляется в теле цикла; переключение отложенного расширения гарантирует отсутствие потери !
):
@echo off
(
for /F "skip=1 delims=" %%L in ('findstr /N "^" "data.txt"') do (
set "LINE=%%L"
setlocal EnableDelayedExpansion
echo(!LINE:*:=!
endlocal
)
) > "data_NEW.txt"
Это по-прежнему ограничивает строки длинойоколо 8190 символов / байт.
Или вы можете использовать перенаправление ввода <
вместе с set /P
(для этого необходимо заранее определить общее количество строк):
@echo off
for /F %%C in ('find /C /V "" ^< "data.txt"') do set "COUNT=%%C"
setlocal EnableDelayedExpansion
(
for /L %%I in (1,1,%COUNT%) do (
set "LINE=" & set /P LINE=""
if %%I gtr 1 echo(!LINE!
)
) < "data.txt" > "data_NEW.txt"
endlocal
Это ограничивает линии длиной додо 1022 символов / байт.
Чтобы заменить исходный файл измененным, просто сделайте следующее:
move /Y "data_NEW.txt" "data.txt" > nul