从文本文件回显第n行,其中'n'是命令行参数

时间:2011-06-20 10:32:43

标签: batch-file

我有一个简单的文本文件,其中包含数字:

12345
45678
34567
89101

我需要一个将从此文件返回n行的批处理。 n应该从命令行参数中获取。

我是批处理脚本的新手,所以提前感谢您提供任何帮助。

7 个答案:

答案 0 :(得分:6)

要从第n行获取文件 ,您可以使用更多+ n(对于第1行,n = 0)。
要拆分文件的其余部分,可以使用FOR /F循环。

如果在第n行之前有空行,这甚至可以工作 可能需要将EOL设置为未使用的字符或换行符(默认为;

set "lineNr=%1"
set /a lineNr-=1
for /f "usebackq delims=" %%a in (`more +%lineNr% text.txt`) DO (
  echo %%a
  goto :leave
)
:leave

答案 1 :(得分:2)

您可以使用批处理文件扩展名。

<强> token.bat

 @echo off

 setlocal ENABLEDELAYEDEXPANSION
 set l=%1
 set c=0
 for /f "delims=" %%1 in ('type foo.txt') do (
   set /a c+=1 && if "!c!" equ "%l%" echo %%1%
 )

如果您有如下文件,

<强> foo.txt的

 AAAA
 BBBB
 CCCC
 DDDD

并指定行号如下

 token 3

你会得到

  

CCCC

答案 2 :(得分:0)

您可以将FOR /Fskip参数一起使用:

@ECHO OFF
SET skip=%1
SET /A skip-=1
IF %skip% LSS 0 GOTO out
IF %skip% GTR 0 SET params="skip=%skip%"
FOR /F %params% %%L IN (filename) DO (SET "line=%%L"& GOTO out)
:out
ECHO %line%

skip参数表示FOR /F循环必须在开头跳过指定的行数。仅当您指定的行号大于1时才应用该参数。如果指定小于1的数字或非数字,则脚本将输出空字符串。

答案 3 :(得分:0)

为杰布的解决方案+1 ...我没有意识到你可以使用 更多 命令来跳过这样的行!

这是我用来从文件(或从另一个程序的多行输出)获取特定行的替代方法:

@echo off
for /f "tokens=1* delims=:" %%a in ('findstr /n .* "C:\SomeFile.txt"') do (
  if "%%a" equ "%1" echo.%%b
)

我使用 findstr / n。*“Path \ FileName.ext”来添加行号,并确保for循环不会跳过空行。

然后我将“tokens = 1 * delims =:”设置为将行号与行内容分开。

最后,我将当前行号( %% a )与%1 参数指定的行进行比较,并回显行内容(% %b )匹配。

答案 4 :(得分:0)

在行号L中找到第N到第M个字符---查找标签的示例


@echo off

REM Next line = Set command value to a file  OR  Just Choose Your File By Skipping The Line
vol E: > %temp%\justtmp.txt
REM  Vol E:  = Find Volume Lable Of Drive E

REM  Next Line to choose line line no. +0 = line no. 1 
for /f "usebackq delims=" %%a in (`more +0 %temp%\justtmp.txt`) DO (set findstringline=%%a& goto :nextstep)

:nextstep

REM  Next line to read nth to mth Character  here 22th Character to 40th Character
set result=%findstringline:~22,40%

echo %result%
pause
exit /b

另存为查找label.cmd

结果将是您的驱动器E标签

享受

答案 5 :(得分:0)

根据Amit的答案,我制作了一个名为 snip.cmd 的实用程序。

用法:剪切文件行第一个字符

示例:

<强> foo.txt的

    //
    // File Checksum Integrity Verifier version 2.05.
    //
    77752e4c91ba96dcc6c2bb4bdcdbdec5 c:\users\lapinot\desktop\token.bat

snip foo.txt 3 0 33 将产生 77752e4c91ba96dcc6c2bb4bdcdbdec5

这是我的snipe.cmd代码(您可以通过将snip.cmd复制到c:\ Windows \ System32来将snipe添加到命令行中)

    @echo off
    :: USAGE
    :: snip <file> [Line - Starts at 0] [First Column - Start Count at 0] [Last Colum]


    set file=%1
    set line=%2
    set char1=%3
    set char2=%4

    for /f "usebackq delims=" %%a in (`more +%line% %file%`) DO (set findstringline=%%a& goto :nextstep)

    :nextstep
    echo echo %%findstringline:^~%char1%,%char2%%% > %temp%\result.bat
    %temp%\result.bat
    del %temp%\result.bat
    :EOF
    exit /b

答案 6 :(得分:-2)

echo "enter the line number.."; read i; awk 'NR==$i' <file_name>;