ฉันจะอ่านบรรทัดแรกจากไฟล์ข้อความโดยใช้ไฟล์แบตช์ของ 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 KB
;
ซึ่งเป็นอักขระเริ่มต้นของ 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.
ซับเดียวมีประโยชน์สำหรับการเปลี่ยนเส้นทาง 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
เพื่อ 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'th บรรทัดแรกและบรรทัดสุดท้ายของไฟล์ข้อความได้อย่างไร " http://www.netikka.net/tsneti/info/tscmd023.htm
[เพิ่ม 28 ส.ค. 2555]นอกจากนี้ยังมี:
@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: วิธีนี้จะพิมพ์เส้นเท่านั้นไม่ใช่นำหน้าหมายเลขบรรทัด