คุณสามารถอ่านไฟล์ (ข้อความหรือไบนารี) จากไฟล์แบตช์ได้อย่างไร? มีวิธีอ่านในโหมดไบนารีหรือโหมดข้อความ?
TYPE [fileName]
สำหรับ MS-Dos
คุณสามารถอ่านไฟล์ (ข้อความหรือไบนารี) จากไฟล์แบตช์ได้อย่างไร? มีวิธีอ่านในโหมดไบนารีหรือโหมดข้อความ?
TYPE [fileName]
สำหรับ MS-Dos
คำตอบ:
คุณสามารถใช้คำสั่ง for:
FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k
ประเภท
for /?
ที่พรอมต์คำสั่ง นอกจากนี้คุณสามารถแยกวิเคราะห์ไฟล์ ini !
for /?
คำสั่งจะแยกวิเคราะห์แต่ละบรรทัดใน myfile.txt โดยไม่สนใจบรรทัดที่ขึ้นต้นด้วยอัฒภาคโดยส่งผ่านโทเค็นที่ 2 และ 3 จากแต่ละบรรทัดไปยังส่วนเนื้อหาโดยโทเค็นคั่นด้วยเครื่องหมายจุลภาคและ / หรือช่องว่าง
ภายใต้ cmd.exe แบบ NT คุณสามารถวนซ้ำบรรทัดของไฟล์ข้อความด้วยไฟล์
FOR /F %i IN (file.txt) DO @echo %i
พิมพ์ "help for" บนพรอมต์คำสั่งเพื่อดูข้อมูลเพิ่มเติม (ไม่รู้ว่ามันใช้ได้กับ "DOS" อะไรก็ตามที่คุณใช้อยู่)
%%i
มันควรจะเป็น
โดยทั่วไป FOR-LOOP ใช้งานได้ แต่มีปัญหาบางอย่าง FOR ไม่ยอมรับบรรทัดว่างและบรรทัดที่มีมากกว่า ~ 8190 เป็นปัญหา การขยายทำงานได้เฉพาะที่เชื่อถือได้หากปิดใช้งานการขยายล่าช้า
การตรวจจับ CR / LF เทียบกับ LF เดี่ยวดูเหมือนจะซับซ้อนเล็กน้อย
นอกจากนี้อักขระ NUL ยังเป็นปัญหาเนื่องจาก FOR-Loop จะยกเลิกการอ่านทันที
ดังนั้นการอ่านไบนารีโดยตรงจึงแทบจะเป็นไปไม่ได้
ปัญหาเกี่ยวกับเส้นว่างสามารถแก้ไขได้ด้วยเคล็ดลับ นำหน้าแต่ละบรรทัดด้วยหมายเลขบรรทัดโดยใช้คำสั่ง findstr และหลังจากอ่านแล้วให้นำคำนำหน้าออก
@echo off
SETLOCAL DisableDelayedExpansion
FOR /F "usebackq delims=" %%a in (`"findstr /n ^^ t.txt"`) do (
set "var=%%a"
SETLOCAL EnableDelayedExpansion
set "var=!var:*:=!"
echo(!var!
ENDLOCAL
)
สามารถเลือกเปิดใช้งานและการขยายตัวล่าช้าพิการเป็นสิ่งจำเป็นสำหรับการทำงานที่ปลอดภัยกับสตริงเหมือนหรือ!
นั่นเป็นเพราะบรรทัดนั้นปลอดภัยกับDisabledDelayedExpansionเท่านั้นเครื่องหมายอัศเจรีย์อื่น ๆ จะถูกลบออกและเครื่องหมายจะถูกใช้เป็นอักขระหลีก (รอง) และจะถูกลบออกไปด้วย
แต่การใช้ตัวแปรจะปลอดภัยกับEnabledDelayedExpansionเท่านั้นเนื่องจากจะล้มเหลวด้วยเนื้อหาเช่น.^^^xy!z
set "var=%%a"
var
call %%var%%
"&"&
แก้ไข: ตัวแปร set / p ที่เพิ่ม
มีวิธีที่สองในการอ่านไฟล์ด้วยset /p
ข้อเสียเพียงอย่างเดียวคือ จำกัด ไว้ที่ ~ 1024 ตัวอักษรต่อบรรทัดและจะลบอักขระควบคุมที่ปลายบรรทัด
แต่ข้อดีคือคุณไม่ต้องการการสลับที่ล่าช้าและง่ายต่อการจัดเก็บค่าในตัวแปร
@echo off
setlocal EnableDelayedExpansion
set "file=%~1"
for /f "delims=" %%n in ('find /c /v "" %file%') do set "len=%%n"
set "len=!len:*: =!"
<%file% (
for /l %%l in (1 1 !len!) do (
set "line="
set /p "line="
echo(!line!
)
)
สำหรับการอ่าน "ไบนารี" ในการแทนค่าฐานสิบหก
คุณสามารถดูSO: การแปลงไฟล์ไบนารีเป็นการแสดง HEX โดยใช้ไฟล์แบตช์
set /p
. ฉันใช้set /p value=< result.txt
รับบรรทัดแรกจากไฟล์ข้อความ
0x1A
ล่ะ? ไม่for /F
ทำงานในลักษณะเช่นเดียวกับกับ (NUL 0x00
) ตัวละคร?
:
หรือ;
หรือมี!
วิธีหนึ่งที่ง่ายมากคือใช้คำสั่งต่อไปนี้:
set /p mytextfile=< %pathtotextfile%\textfile.txt
echo %mytextfile%
สิ่งนี้จะแสดงเฉพาะข้อความบรรทัดแรกในไฟล์ข้อความ วิธีอื่นที่คุณสามารถทำได้คือใช้คำสั่งต่อไปนี้:
type %pathtotextfile%\textfile.txt
เพื่อใส่ข้อมูลทั้งหมดในไฟล์ข้อความบนหน้าจอ หวังว่านี่จะช่วยได้!
มีหลายวิธีที่แตกต่างกัน แต่ถ้าคุณต้องการแสดงข้อความเท่านั้นและไม่เก็บไว้ที่ใดก็ได้คุณเพียงแค่ใช้: findstr /v "randomtextthatnoonewilluse" filename.txt
รหัสที่แก้ไข:
setlocal enabledelayedexpansion
for /f "usebackq eol= tokens=* delims= " %%a in (`findstr /n ^^^^ "name with spaces.txt"`) do (
set line=%%a
set "line=!line:*:=!"
echo(!line!
)
endlocal
pause
eol=
และdelims=
ไม่จำเป็นset line=%%a
ควรใช้เครื่องหมายคำพูดและหากไม่สลับโหมดขยายล่าช้าโค้ดจะไม่สามารถอ่านเครื่องหมายอัศเจรีย์ได้