Batch file 在命令提示下显示文本文件中的行(n)

Batch file 在命令提示下显示文本文件中的行(n),batch-file,command-line,cmd,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 )) 这只是第一行 @echo off setlocal set "FIL

我的文本文件包含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
))
这只是第一行

@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

有两种方法可以做到这一点。你的第一个选择是正常地通过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

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

@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!
@echo关闭
延迟扩展
::指定要返回的行
设置get_line=7
::跳过它前面的所有行,然后打印下一行并中止
设置/a获取线-=2
(
对于(0,1,%get\u line%)中的/L%%A,请设置/p跳过\u line=
设置/p返回线=

)既然你说了“显示”,为什么不试一试呢

从PowerShell控制台:

GC.\mytext.txt-t3 |选择-l1
从CMD控制台(命令提示符):

PowerShell“GC.\mytext.txt-t7 |选择-l1”
从批处理文件:

@(PowerShell“GC.\mytext.txt-t19 |选择-l1”&暂停)

@Compo给出了一个很好的答案。这只是为了对其进行阐述。不应在脚本中使用类似于
GC
的别名。当然,在命令行中,如果您愿意,可以继续并减少键入。此外,拼写参数名称可以提供更多信息并帮助更快理解

只有第三行

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

Get-Content -Path '.\mytext.txt' -TotalCount 3 | Select-Object -Last 1
从CMD控制台(命令提示符):(仅获取第七(7)行)

要获取第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)"

很少需要在批处理文件的提示下显示一行,您能解释一下您打算对返回的行执行什么操作吗?在一个不相关的注释中,您的
if
语句是多余的;它将始终返回true,
1
与它作为第一行无关。可能重复大量重复项:,,文本文件有多大,最长的一行有多长?当从cmd.exe批处理脚本调用PowerShell时,如上一个示例中所示,如果一行超过80个字符,将自动在输出中的位置80插入换行符。如何避免此情况?在我的特定用例中,我将管道输出f使用PowerShell命令进行剪辑,并且在粘贴时不希望添加换行符。在使用PowerShell 5.1.14409.1012的Windows 7 Enterprise SP1上,我似乎没有这样的结果。哇,这真是太棒了!感谢您结束了我让findstr正常工作的努力。我希望我能想出如何将这种魔力与获得最后一个字结合起来(可能是(state.txt)中/f“tokens=2”%%a的
的某些变体确实设置了word1=%%a
)@deasserted-你想知道最后一句话吗?这也是可以做到的,尽管在评论中回答你并不那么方便。@deasserted-这是困扰你的原因吗?是的,我用你的方法解决了这个问题。我最终使用了你的解决方案,用
set/p line=读回,只是为了帮助其他人理解这个答案中的内容:break>部件创建一个空文件(可能是它自己的行)。它与FC(文件比较)一起使用在/lb LINE_NUMBER之后裁剪所有行的实用程序。它可以工作,但它的报告需要清理:因此MORE+4在LINE_NUMBER之前裁剪FC结果,findstr会找到其中没有****的行。我不确定为什么需要最后一行,但我假设它可以处理一个角落的情况。如果要保存结果,请添加>my_filename以存储它,then
设置/p我的行=
SET "FIRSTLINE=3"
SET "LASTLINE=7"
powershell -NoProfile -Command ^
    "Get-Content -Path '.\t.txt' -TotalCount %LASTLINE% |" ^
        "Select-Object -Last (%LASTLINE% - %FIRSTLINE% + 1)"