Пакетная команда Windows для чтения первой строки из текстового файла

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

73 голоса | спросил Jesse Vogt 25 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowThu, 25 Sep 2008 01:33:27 +0400 2008, 01:33:27

12 ответов


0

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

ответил indiv 25 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowThu, 25 Sep 2008 02:20:14 +0400 2008, 02:20:14
0

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

  set /p texte=< file.txt  
  echo %texte%
ответил Spaceballs 19 +04002011-10-19T23:49:31+04:00312011bEurope/MoscowWed, 19 Oct 2011 23:49:31 +0400 2011, 23:49:31
0

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

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:\>
ответил Amit Naidu 26 J000000Tuesday11 2011, 06:00:59
0

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

@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
)
ответил Ross Fuhrman 25 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowThu, 25 Sep 2008 01:42:42 +0400 2008, 01:42:42
0

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

@echo off
for /f "delims=" %%a in ('type sample.txt') do (
echo %%a
exit /b
)
ответил Jesse Vogt 25 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowThu, 25 Sep 2008 01:55:41 +0400 2008, 01:55:41
0

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

@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.
ответил Ray Hayes 25 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowThu, 25 Sep 2008 02:09:36 +0400 2008, 02:09:36
0

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

@for /f %%i in ('type yourfile.txt') do @echo %%i & exit
ответил PabloG 25 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowThu, 25 Sep 2008 02:41:02 +0400 2008, 02:41:02
0

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

@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
ответил Sarath Avanavu 29 22016vEurope/Moscow11bEurope/MoscowTue, 29 Nov 2016 20:23:04 +0300 2016, 20:23:04
0

Проблема с решениями 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
ответил Timo Salmi 25 J000000Wednesday12 2012, 20:37:49
0

Вот обходной путь, использующий 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")
ответил mmj 20 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowThu, 20 Sep 2018 13:05:58 +0300 2018, 13:05:58
0

Обратите внимание, что подходы к пакетному файлу будут ограничены линией строки для процессора команд DOS - см. Какое ограничение длины командной строки? .

Поэтому, если вы попытаетесь обработать файл, в котором есть строки, длина которых превышает 8192 символов, скрипт просто пропустит их, поскольку значение не может быть сохранено.

ответил kevinjansz 2 ndEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 02 Sep 2009 08:12:36 +0400 2009, 08:12:36
0

Другой способ

setlocal enabledelayedexpansion
@echo off
for /f "delims=" %%i in (filename.txt) do (
if 1==1 (
set first_line=%%i
echo !first_line!
goto :eof
))
ответил hhay 27 FebruaryEurope/MoscowbTue, 27 Feb 2018 09:52:52 +0300000000amTue, 27 Feb 2018 09:52:52 +030018 2018, 09:52:52

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132