Как удалить первую строку из текстового файла с помощью cmd? - PullRequest
0 голосов
/ 25 мая 2018

Это мой текстовый файл, и я хочу удалить первую строку (с пробелом):

abc!
def  #
ghi./;
jklm
nopqrs

Как удалить первую строку из моего текстового файла?

Я хочу свою вторуюстрока должна быть первой строкой:

def  #
ghi./;
jklm
nopqrs

Я пробовал команду findstr, но она не работает.

Ответы [ 3 ]

0 голосов
/ 25 мая 2018

Самый простой подход (при условии, что ваш текстовый файл называется 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
0 голосов
/ 25 мая 2018

С PowerShell это довольно просто.Если файл не большой, Get-Content работает хорошо.

Get-Content -Path .\t.txt | Select-Object -Skip 1

Если вам нужно запустить оболочку cmd.exe, используйте:

powershell -NoProfile -Command "Get-Content -Path .\t.txt | Select-Object -Skip 1"
0 голосов
/ 25 мая 2018

В приглашении

for /f "skip=1delims=" %a in (yourtextfilename) do >>anoutputfilename echo %a

, где yourtextfilename & anoutputfilename должны быть разными именами файлов и должны быть "заключены в кавычки", если они содержат пробелы или другие разделители.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...