Làm cách nào để đọc dòng đầu tiên từ tệp văn bản bằng tệp loạt Windows? Vì tệp lớn nên tôi chỉ muốn xử lý dòng đầu tiên.Lệnh batch của Windows để đọc dòng đầu tiên từ tệp văn bản
Trả lời
Đây là tệp lô có mục đích chung để in đầu các dòng n
từ một tệp như tiện ích GNU head
, thay vì chỉ một dòng.
@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
Ví dụ:
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
Nó hiện không đếm dòng trống. Nó cũng phụ thuộc vào giới hạn độ dài dòng hàng loạt là 8 KB.
FYI: "GOTO: EOF" Đó là một nhãn đặc biệt sẽ thoát khỏi tập lệnh mà không cần phải xác định nhãn ": thoát" đặc biệt. Nó cũng hữu ích khi xác định các chương trình con trong loạt (bạn nói gì? Subroutines? Yep) – Steven
Điều này dường như bom ra trên một số tập tin văn bản GB của tôi ... Trên một tập tin nó đã cho tôi một lỗi "Out of Memory" khi cố gắng trả về 10 dòng, trên tập tin khác nó chỉ trả lại một dòng trống khi yêu cầu nó trả về 10 dòng. có ai biết tại sao việc này lại xảy ra? – Dan
Cùng một vấn đề ở đây .. –
Bạn có thể cung cấp cho một thử này:
@echo off
for /f %%a in (sample.txt) do (
echo %%a
exit /b
)
chỉnh sửa Hoặc, nói rằng bạn có bốn cột dữ liệu và muốn từ hàng thứ 5 xuống phía dưới, hãy thử này:
@echo off
for /f "skip=4 tokens=1-4" %%a in (junkl.txt) do (
echo %%a %%b %%c %%d
)
Điều này đã cho tôi manh mối tôi cần nhưng không hoàn toàn đúng. Không chắc chắn các thủ tục thích hợp là gì nhưng tôi kết hợp giải pháp này vào giải pháp cuối cùng. xem http://stackoverflow.com/questions/130116#130209 –
Vấn đề của giải pháp này là nó phân tách trên không gian thay vì dòng mới, và bạn không thể có một tên tập tin có dấu cách. Bạn có thể khắc phục những vấn đề này với các tùy chọn delims và usebackq trong vòng lặp for. – indiv
Nhờ thetalkingwalnut với câu trả lời Windows batch command(s) to read first line from text file Tôi đã đưa ra giải pháp sau:
@echo off
for /f "delims=" %%a in ('type sample.txt') do (
echo %%a
exit /b
)
Hơi xây dựng dựa trên câu trả lời của người khác. Bây giờ cho phép bạn chỉ định các tập tin bạn muốn đọc từ và biến bạn muốn kết quả đưa vào:
@echo off
for /f "delims=" %%x in (%2) do (
set %1=%%x
exit /b
)
Điều này có nghĩa bạn có thể sử dụng trên như thế này (giả sử bạn gọi nó là getline.bat)
c:\> dir > test-file
c:\> getline variable test-file
c:\> set variable
variable= Volume in drive C has no label.
Một lót, hữu ích cho stdout redirect với ">":
@for /f %%i in ('type yourfile.txt') do @echo %%i & exit
Điều này dường như không hoạt động trong Win 8.1: -/ –
Lưu ý, phương pháp tiếp cận tập tin thực thi sẽ được giới hạn ở những giới hạn dòng cho bộ vi xử lý lệnh DOS - xem What is the command line length limit?. Vì vậy, nếu cố gắng xử lý tệp có bất kỳ dòng nào nhiều hơn, thì các ký tự, tập lệnh sẽ chỉ bỏ qua chúng vì không thể giữ giá trị.
Uh bạn guys ...
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:\>
Nếu tệp có nhiều hơn 11 dòng, nó sẽ in nhiều hơn số đầu tiên, như: 1 :, 11 :, 21 :, v.v. –
Bắt tốt Cesar ! Tôi luôn cố gắng tránh những dấu ngoặc kép bởi vì họ làm phiền tôi, nhưng trong trường hợp này đó là một ý tưởng tồi. Để sửa lỗi, thay đổi thành 'findstr '^ 1:" 'và tăng độ ấm và bảo vệ dấu ngoặc kép. Hoặc, nếu bạn khinh thường những dấu ngoặc kép như tôi và muốn sống nguy hiểm, hãy sử dụng 'findstr/b 1:' –
nếu bạn muốn nó mà không có dấu ngoặc kép và không có tùy chọn/b thì chỉ cần thoát dấu nháy: 'findstr ^^ 1'. – dbenham
uh? imo này là đơn giản hơn nhiều
set /p texte=< file.txt
echo %texte%
+1, Đây là cách tốt nhất khi nó hoạt động :-) Nó có các giới hạn sau 1) Độ dài dòng tối đa là 1021 byte, không bao gồm EOL. 2) Tệp phải sử dụng EOL kiểu Windows của CarriageReturn LineFeed.3) Ký tự điều khiển tra cứu sẽ bị tước khỏi dòng – dbenham
Ngoài ra, văn bản phải được xác định rõ ràng trước khi đọc tệp chỉ trong trường hợp dòng đầu tiên trống. – dbenham
Không hoạt động .... nền tảng giành chiến thắng 7 – Jai
Vấn đề với giải pháp EXIT/B, khi thực tế nhiều bên trong một tập tin thực thi như chỉ là một phần của nó là như sau. Không có quá trình xử lý tiếp theo trong tập tin batch đã nói sau EXIT/B. Thông thường có nhiều hơn nữa để lô hơn chỉ là một, nhiệm vụ hạn chế.
Để đối phó với vấn đề mà
@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
(Tuy nhiên, các nhân vật độc cái gọi sẽ vẫn là một vấn đề.)
Thông tin thêm về chủ đề nhận một dòng cụ thể với các lệnh theo lô:
"23} Làm cách nào để nhận dòng thứ nhất, dòng đầu tiên và dòng cuối cùng của tệp văn bản?"
http://www.netikka.net/tsneti/info/tscmd023.htm
[Added 28-Aug-2012] Người ta cũng có thể có
@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
Tập hợp/p texte =
Hãy thử điều này
@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
Một cách khác
setlocal enabledelayedexpansion
@echo off
for /f "delims=" %%i in (filename.txt) do (
if 1==1 (
set first_line=%%i
echo !first_line!
goto :eof
))
Tôi khuyên bạn nên sử dụng tệp .bat chỉ là phương sách cuối cùng. Nếu tất cả có thể, luôn luôn cố gắng sử dụng một ngôn ngữ kịch bản "thực": Powershell, WSH, Python ... BẤT KTH nhưng các tệp .bat. – paulsm4
Hàng loạt không phải là * xấu * (khi bạn biết, bạn làm gì, giống như với mọi ngôn ngữ khác). hhay: mã của bạn không hoạt động. – Stephan
tại sao nó liều không hoạt động ở lần đầu tiên? – hhay
Hãy thử gnu32 "đầu" tiện ích. Đừng nghĩ rằng những gì bạn đang sau sẽ dễ dàng thực hiện bởi chỉ cần DOS Batch. – Nasir