Показать строку (n) в текстовом файле в командной строке - PullRequest
0 голосов
/ 23 мая 2018

Мой текстовый файл содержит 23 строки (строки включают в себя:! @ $: /; ")

Как отображать только строку 3? In или 7? Или 19?

Iперепробовал все команды в stackoverflow

Пример:

setlocal enabledelayedexpansion
@echo off
for /f "delims=" %%i in (mytext.txt) do (
if 1==1 (
set first_line=%%i
echo !first_line!
goto :eof
))

это только показ первой строки

Ответы [ 4 ]

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

@ Компо дал хороший ответ.Это только для того, чтобы разъяснить это.Использование псевдонимов, таких как GC, не должно вводиться в сценарии.В командной строке, конечно, идти вперед и сократить ввод текста, если вам это нравится.Кроме того, написание имен параметров дает больше информации и помогает быстрее понять.

Чтобы получить только строку 3.

GC .\mytext.txt -T 3|Select -L 1

Get-Content -Path '.\mytext.txt' -TotalCount 3 | Select-Object -Last 1

Из консоли CMD (Командная строка): (чтобы получить только строкусемь (7)

PowerShell "GC .\mytext.txt -T 7|Select -L 1"

PowerShell -NoProfile "Get-Content -Path '.\mytext.txt' -TotalCount 7 | Select-Object -Last 1"

Чтобы получить строки с 3 по 7:

$FirstLine = 3
$LastLine=7
powershell -NoProfile -Command "Get-Content -Path '.\t.txt' -TotalCount $LastLine | Select-Object -Last ($LastLine - $FirstLine + 1)"

Или в пакетном сценарии cmd.exe.

SET "FIRSTLINE=3"
SET "LASTLINE=7"
powershell -NoProfile -Command ^
    "Get-Content -Path '.\t.txt' -TotalCount %LASTLINE% |" ^
        "Select-Object -Last (%LASTLINE% - %FIRSTLINE% + 1)"
0 голосов
/ 23 мая 2018

Есть несколько способов сделать это.Ваш первый вариант - нормально пройти цикл for и выйти из него, как только вы достигнете нужной строки.

@echo off

:: Specify which line to return
set get_line=7

:: Skip all lines before it, then print the next line and abort
set /a get_line-=1
for /F "skip=%get_line% delims=" %%A in (mytext.txt) do (
    echo %%A
    goto :end_loop
)

:end_loop

Другой вариант - сохранить все строки перед нежелательной строкой впеременная temp, а затем отобразите следующую строку.

@echo off
setlocal enabledelayedexpansion

:: Specify which line to return
set get_line=7

:: Skip all lines before it, then print the next line and abort
set /a get_line-=2

(
    for /L %%A in (0,1,%get_line%) do set /p skip_line=
    set /p return_line=
) <file.txt

echo !return_line!

Обратите внимание, что первая опция не подходит для возврата первой строки скрипта.

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

Поскольку вы сказали 'display', почему бы не сделать PowerShell снимок:

С консоли PowerShell:

GC .\mytext.txt -T 3|Select -L 1

С консоли CMD (Командная строка):

PowerShell "GC .\mytext.txt -T 7|Select -L 1"

Из пакетного файла:

@(PowerShell "GC .\mytext.txt -T 19|Select -L 1"&Pause)
0 голосов
/ 23 мая 2018
@echo off
setlocal
set "FILE_TO_PROCESS=%~f1"
set /a LINE_NUMBER=%~2
set /a trim=LINE_NUMBER-1

break>"%temp%\empty"&&fc "%temp%\empty" "%FILE_TO_PROCESS%" /lb  %LINE_NUMBER% /t |more +4 | findstr /B /E /V "*****"|more +%trim%
endlocal

попробуйте с этим bat (он называется lineNumber.bat) первый аргумент - это файл, который вы хотите обработать, второй - номер строки:

call lineNumber.bat someFile.txt 5
...