在文本文件中显示行(n)在命令提示符中

时间:2018-05-23 14:46:40

标签: batch-file command-line cmd

我的文本文件包含23行(行包括:!@ $:/;“)

我怎样才能显示第3行?在或7?还是19?

我尝试了所有命令都在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 :(得分:5)

@Compo给出了一个很好的答案。这只是为了阐述它。不应将像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)"

答案 1 :(得分:1)

@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

答案 2 :(得分:1)

有几种方法可以做到这一点。您的第一个选择是正常进行for循环,并在到达所需的行后突破循环。

@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!

您的另一个选择是将所有行存储在临时变量中不需要的行之前,然后显示下一行。

myMap.insert(Object1);  // hash H1 is internally calculated
Object1.DoChange();     // temporary modification
Object2 = Clone(Object1);
myMap.insert(Object2);  // <-- problem - rehashes internally and finds different hash H1 for Object1 !
Object1.UndoChange();   // too late, damage done

请注意,第一个选项不适合返回脚本的第一行。

答案 3 :(得分:0)

既然你说'显示',为什么不给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)