Пакетную команду Windows(ы), чтобы прочитать первую строку из текстового файла
Как я могу прочитать первую строку из текстового файла с помощью пакетного файла Windows? Поскольку файл большой, я хочу иметь дело только с первой линии.
12 ответов:
вот универсальный пакетный файл для печати сверху
n
строки из файла типа GNUhead
утилита, а не просто одна строка.@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 КБ.
Ух ты, ребята...
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:\>
вы можете попробовать:
@echo off for /f %%a in (sample.txt) do ( echo %%a exit /b )
edit Или, скажем, у вас есть четыре столбца данных и хотите от 5-й строки вниз, попробуйте это:
@echo off for /f "skip=4 tokens=1-4" %%a in (junkl.txt) do ( echo %%a %%b %%c %%d )
спасибо thetalkingwalnut с ответом пакетная команда Windows для чтения первой строки из текстового файла Я придумал следующее решение:
@echo off for /f "delims=" %%a in ('type sample.txt') do ( echo %%a exit /b )
слегка опираясь на ответы других людей. Теперь вы можете указать файл, который вы хотите прочитать, и переменную, в которую вы хотите поместить результат:
@echo off for /f "delims=" %%x in (%2) do ( set %1=%%x exit /b )
Это означает, что вы можете использовать выше, как это (предполагая, что вы назвали его getline.летучая мышь)
c:\> dir > test-file c:\> getline variable test-file c:\> set variable variable= Volume in drive C has no label.
один лайнер, полезный для перенаправления stdout с помощью">":
@for /f %%i in ('type yourfile.txt') do @echo %%i & exit
попробуй такое
@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
проблема с
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
обратите внимание, что подходы к пакетным файлам будут ограничены пределом строки для командного процессора DOS-см. каков предел длины командной строки?.
Так что если вы пытаетесь обработать файл, который имеет какие-либо строки больше, чем 8192 символы скрипт просто пропустит их, так как значение не может быть удержано.
другой способ
setlocal enabledelayedexpansion @echo off for /f "delims=" %%i in (filename.txt) do ( if 1==1 ( set first_line=%%i echo !first_line! goto :eof ))
вот обходной путь с помощью
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")