Как я могу прочитать первую строку из текстового файла с помощью командного файла Windows? Поскольку файл большой, я хочу иметь дело только с первой строкой.
Как я могу прочитать первую строку из текстового файла с помощью командного файла Windows? Поскольку файл большой, я хочу иметь дело только с первой строкой.
Ответы:
Вот командный файл общего назначения для печати верхних n
строк из файла, такого как head
утилита GNU , вместо одной строки.
@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 КБ.
;
, символа FOR / F EOL по умолчанию. Если запросить 10 строк, он напечатает первые 10 строк, которые не пусты и не начинаются ;
.
а? имо это намного проще
set /p texte=< file.txt
echo %texte%
echo %texte:~3%
например, пропустит первые три символа. Это полезно, когда вы читаете файл UTF-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:\>
findstr "^1:"
и получите теплоту и защиту двойных кавычек. Или, если вы презираете такие цитаты, как я, и хотите жить опасно, используйтеfindstr /b 1:
findstr ^^1
.
set /p
Решение является гораздо более эффективным для больших файлов.
Вы можете попробовать:
@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
)
"delims="
чтобы распечатать полные имена папок вместе с пробелами.
Благодаря 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.bat)
c:\> dir > test-file
c:\> getline variable test-file
c:\> set variable
variable= Volume in drive C has no label.
Попробуй это
@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
Чтобы Cicle файл ( file1.txt
, file1[1].txt
, file1[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%
И это работает.
set /p
спрашивает через подсказку; однако при перенаправлении файла <
он сразу же получает содержимое файла по запросу; и поскольку первая строка заканчивается строкой, в этот момент подсказка перестает читать и, таким образом, сохраняет только первую строку в переменной.
Проблема с 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")
for /f "delims=" %a in (downing.txt) do echo %a & pause>nul
Печатает 1-ю строку, затем ожидает, пока пользователь нажмет клавишу для печати следующей строки. После печати необходимых строк нажмите Ctrl + C для остановки.
@Ross Presser: этот метод печатает только строки, но не добавляет номера строк.