Як я можу прочитати перший рядок із текстового файлу за допомогою командного файлу 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 рядків, які не є порожніми і не починаються з ;
.
а? imo це набагато простіше
set /p texte=< file.txt
echo %texte%
Ух, хлопці ...
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
)
редагувати Або, скажімо, у вас є чотири стовпці даних і ви хочете, щоб з 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
Проблема з 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
Щоб 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
запитує через підказку; однак при перенаправленні файлу <
воно негайно отримує вміст файлу за запитом; і оскільки перший рядок закінчується рядком, що закінчується, в цей момент підказка припиняє читання і, таким чином, зберігає лише перший рядок у змінній.
Зауважте, підходи до командного файлу будуть обмежені обмеженням рядків для командного процесора 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: Цей метод друкує лише рядки, а не додає номери рядків.