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

时间:2008-09-24 21:33:28

标签: batch-file cmd

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

14 个答案:

答案 0 :(得分:190)

呃? imo这个更简单

  set /p texte=< file.txt  
  echo %texte%

答案 1 :(得分:44)

这是一个通用的批处理文件,用于打印GNU n实用程序等文件中的前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

例如:

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

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

答案 2 :(得分:18)

呃,你们......

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:\>

答案 3 :(得分:10)

你可以尝试一下:

@echo off

for /f %%a in (sample.txt) do (
  echo %%a
  exit /b
)

修改 或者,假设您有四列数据,并希望从第5行到底部,请尝试:

@echo off

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

答案 4 :(得分:5)

感谢thewalkingwalnut回答Windows batch command(s) to read first line from text file我提出了以下解决方案:

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

答案 5 :(得分:3)

略微建立在其他人的答案上。现在允许您指定要读取的文件以及要将结果放入的变量:

@echo off
for /f "delims=" %%x in (%2) do (
set %1=%%x
exit /b
)

这意味着你可以使用上面这样的(假设你称之为getline.bat)

c:\> dir > test-file
c:\> getline variable test-file
c:\> set variable  
variable= Volume in drive C has no label.

答案 6 :(得分:3)

一个衬垫,对于带有“&gt;”的标准重定向很有用:

@for /f %%i in ('type yourfile.txt') do @echo %%i & exit

答案 7 :(得分:1)

EXIT /B解决方案的问题,当批处理文件中更真实地作为其中的一部分时,如下所示。在EXIT /B之后,在所述批处理文件中没有后续处理。通常,批次不仅仅是一项有限的任务。

要解决这个问题:

@echo off & setlocal enableextensions enabledelayedexpansion
set myfile_=C:\_D\TEST\My test file.txt
set FirstLine=
for /f "delims=" %%i in ('type "%myfile_%"') do (
  if not defined FirstLine set FirstLine=%%i)
echo FirstLine=%FirstLine%
endlocal & goto :EOF

(但是,所谓的毒药字符仍然是个问题。)

有关使用批处理命令获取特定行的主题的更多信息:

  

如何获取文本文件的第n行,第一行和最后一行?“   http://www.netikka.net/tsneti/info/tscmd023.htm

[2012年8月28日添加] 还可以:

@echo off & setlocal enableextensions
set myfile_=C:\_D\TEST\My test file.txt
for /f "tokens=* delims=" %%a in (
  'type "%myfile_%"') do (
    set FirstLine=%%a& goto _ExitForLoop)
:_ExitForLoop
echo FirstLine=%FirstLine%
endlocal & goto :EOF

答案 8 :(得分:1)

试试这个

@echo off
setlocal enableextensions enabledelayedexpansion
set firstLine=1
for /f "delims=" %%i in (yourfilename.txt) do (
    if !firstLine!==1 echo %%i
    set firstLine=0
)
endlocal

答案 9 :(得分:1)

这是使用powershell的解决方法:

powershell (Get-Content file.txt)[0]

(您还可以使用powershell (Get-Content file.txt)[0..3]轻松地读取一系列行)

如果您需要在批处理脚本中将变量设置为file.txt的第一行,则可以使用:

for /f "usebackq delims=" %%a in (`powershell ^(Get-Content file.txt^)[0]`) do (set "head=%%a")

答案 10 :(得分:0)

注意,批处理文件方法将限制为DOS命令处理器的行限制 - 请参阅What is the command line length limit?

因此,如果尝试处理的文件具有多于 8192 字符的行,则脚本将跳过它们,因为无法保存该值。

答案 11 :(得分:0)

要对文件(file1.txtfile1[1].txtfile1[2].txt等)进行分段:

START/WAIT C:\LAERCIO\DELPHI\CICLADOR\dprCiclador.exe C:\LAERCIUM\Ciclavel.txt

rem set/p ciclo=< C:\LAERCIUM\Ciclavel.txt:
set/p ciclo=< C:\LAERCIUM\Ciclavel.txt

rem echo %ciclo%:
echo %ciclo%

它正在运行。

答案 12 :(得分:0)

for /f "delims=" %a in (downing.txt) do echo %a & pause>nul

打印第一行,然后等待用户按一个键打印下一行。 打印所需的行后,按Ctrl + C停止。

@Ross Presser:此方法仅打印行,而不在行号前加

答案 13 :(得分:0)

在 Windows PowerShell 中,可以使用下面的 cmd 获取第一行并将其替换为静态值

powershell -Command "(gc txt1.txt) -replace (gc txt1.txt)[0], 'This is the first line' | Out-File -encoding ASCII txt1.txt"

参考


How can you find and replace text in a file using the Windows command-line environment?