Пакетная команда Windows для чтения первой строки из текстового файла - PullRequest
74 голосов
/ 25 сентября 2008

Как я могу прочитать первую строку из текстового файла, используя пакетный файл Windows? Поскольку файл большой, я хочу иметь дело только с первой строкой.

Ответы [ 13 ]

190 голосов
/ 19 октября 2011

ээ? ИМХО это намного проще

  set /p texte=< file.txt  
  echo %texte%
44 голосов
/ 25 сентября 2008

Вот пакетный файл общего назначения для печати верхних n строк из файла, такого как утилита GNU 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 КБ.

18 голосов
/ 26 июля 2011

Эх, ребята ...

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:\>
10 голосов
/ 25 сентября 2008

Вы можете попробовать:

@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
)
5 голосов
/ 25 сентября 2008

Благодаря thetalkingwalnut с ответом Пакетная команда Windows для чтения первой строки из текстового файла Я нашел следующее решение:

@echo off
for /f "delims=" %%a in ('type sample.txt') do (
echo %%a
exit /b
)
3 голосов
/ 25 сентября 2008

Один вкладыш, полезен для перенаправления stdout с ">":

@for /f %%i in ('type yourfile.txt') do @echo %%i & exit
3 голосов
/ 25 сентября 2008

Немного опираясь на ответы других людей. Теперь вы можете указать файл, из которого хотите прочитать, и переменную, в которую хотите поместить результат:

@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.
1 голос
/ 20 сентября 2018

Вот обходной путь, используя 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")
1 голос
/ 29 ноября 2016

Попробуйте это

@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
1 голос
/ 25 июля 2012

Проблема с решениями 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

[Добавлено 28 августа 2012 года] Можно также иметь:

@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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...