Windows批处理命令从文本文件中读取第一行

Jes*_*ogt 77 cmd batch-file

如何使用Windows批处理文件从文本文件中读取第一行?由于文件很大,我只想处理第一行.

Spa*_*lls 204

呃?imo这个更简单

  set /p texte=< file.txt  
  echo %texte%
Run Code Online (Sandbox Code Playgroud)

  • +1,这是最好的工作时:-)它有以下限制1)最大行长度为1021字节,不包括EOL.2)文件必须使用CarriageReturn LineFeed的Windows样式EOL.3)尾随控制字符将从该行中剥离 (13认同)
  • [此处](https://www.dostips.com/DtTipsStringManipulation.php)是一些修剪字符串的额外提示。例如,`echo %texte:~3%` 将跳过前三个字符。当您读取带有 BOM 的 UTF-8 文件时,这非常有用。 (4认同)
  • 此外,在读取文件之前,应明确地定义texte,以防第一行为空. (2认同)

ind*_*div 45

这是一个通用批处理文件,用于打印nGNU head实用程序等文件中的顶行,而不是单行.

@echo off

if [%1] == [] goto usage
if [%2] == [] goto usage

call :print_head %1 %2
goto :eof

REM
REM print_head
REM Prints the first non-blank %1 lines in the file %2.
REM
:print_head
setlocal EnableDelayedExpansion
set /a counter=0

for /f ^"usebackq^ eol^=^

^ delims^=^" %%a in (%2) do (
        if "!counter!"=="%1" goto :eof
        echo %%a
        set /a counter+=1
)

goto :eof

:usage
echo Usage: head.bat COUNT FILENAME
Run Code Online (Sandbox Code Playgroud)

例如:

Z:\>head 1 "test file.c"
; this is line 1

Z:\>head 3 "test file.c"
; this is line 1
    this is line 2
line 3 right here
Run Code Online (Sandbox Code Playgroud)

它目前不计算空行.它还受批量文件行长度限制8 KB的限制.

  • 仅供参考:"GOTO:EOF"这是一个特殊标签,它将退出脚本而无需定义特殊的":exit"标签.它在批处理中定义子程序时也很有用(你说的是什么?子程序?是的) (10认同)
  • 这似乎轰炸了我的几个GB文本文件......在一个文件中,它在尝试返回10行时给了我"Out of Memory"错误,在另一个文件上它只是在要求它返回时返回一个空行10行.任何想法为什么会这样? (4认同)

Ami*_*idu 20

呃你们......

C:\>findstr /n . c:\boot.ini | findstr ^1:

1:[boot loader]

C:\>findstr /n . c:\boot.ini | findstr ^3:

3:default=multi(0)disk(0)rdisk(0)partition(1)\WINNT

C:\>
Run Code Online (Sandbox Code Playgroud)

  • 如果你想要它没有引号而没有/ b选项那么只需要转义插入符:`findstr ^^ 1`. (4认同)
  • 如果文件超过11行,它将打印多于第一行,如:1:,11:,21:等等... (2认同)
  • 好抓住塞萨尔!我总是尽量避免引用,因为它们会惹恼我,但在这种情况下,这是一个坏主意。要修复,请更改为 `findstr "^1:"` 并获得双引号的温暖和保护。或者,如果你鄙视像我这样的名言并想危险地生活,请使用`findstr /b 1:` (2认同)
  • 此外,它会将行号添加到您真正想要的文本行中!因此,当您需要文本时不那么有用. (2认同)

Ros*_*man 10

你可以尝试一下:

@echo off

for /f %%a in (sample.txt) do (
  echo %%a
  exit /b
)
Run Code Online (Sandbox Code Playgroud)

编辑 或者,假设您有四列数据并希望从第5行到底部,请尝试以下操作:

@echo off

for /f "skip=4 tokens=1-4" %%a in (junkl.txt) do (
  echo %%a %%b %%c %%d
)
Run Code Online (Sandbox Code Playgroud)

  • 这个解决方案的问题是它在空格而不是换行符上划分,并且你不能有空格的文件名.您可以使用for循环中的delims和usebackq选项修复这些问题. (2认同)

Jes*_*ogt 5

感谢thewalkingwalnut回答Windows批处理命令从文本文件中读取第一行我想出了以下解决方案:

@echo off
for /f "delims=" %%a in ('type sample.txt') do (
echo %%a
exit /b
)
Run Code Online (Sandbox Code Playgroud)


小智 5

powershell Get-Content file.txt -Head 1

这个比上面读取完整文件的其他 powershell 示例要快得多。