Bagaimana Anda dapat membaca file (teks atau biner) dari file batch? Ada cara untuk membacanya dalam mode biner atau mode teks?
TYPE [fileName]
untuk MS-Dos.
Bagaimana Anda dapat membaca file (teks atau biner) dari file batch? Ada cara untuk membacanya dalam mode biner atau mode teks?
TYPE [fileName]
untuk MS-Dos.
Jawaban:
Anda dapat menggunakan perintah for:
FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k
Tipe
for /?
pada prompt perintah. Juga, Anda dapat mengurai file ini !
for /?
perintah akan mengurai setiap baris di myfile.txt, mengabaikan baris yang dimulai dengan titik koma, meneruskan token ke-2 dan ke-3 dari setiap baris ke badan for, dengan token yang dipisahkan oleh koma dan / atau spasi.
Di bawah cmd.exe gaya NT, Anda dapat melakukan perulangan melalui baris file teks dengan
FOR /F %i IN (file.txt) DO @echo %i
Ketik "bantuan untuk" pada prompt perintah untuk informasi lebih lanjut. (tidak tahu apakah itu berfungsi di "DOS" apa pun yang Anda gunakan)
%%i
.
FOR-LOOP umumnya berfungsi, tetapi ada beberapa masalah. FOR tidak menerima baris kosong dan baris dengan lebih dari ~ 8190 bermasalah. Perluasan hanya berfungsi andal, jika perluasan yang tertunda dinonaktifkan.
Deteksi CR / LF versus LF tunggal tampaknya juga sedikit rumit.
Karakter NUL juga bermasalah, karena FOR-Loop segera membatalkan pembacaan.
Oleh karena itu, pembacaan biner langsung tampaknya hampir tidak mungkin.
Masalah dengan garis kosong bisa diselesaikan dengan trik. Awali setiap baris dengan nomor baris, menggunakan perintah findstr, dan setelah membaca, hapus awalan tersebut.
@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
)
Beralih antara mengaktifkan dan menonaktifkan perluasan tertunda diperlukan untuk keamanan bekerja dengan string, seperti !
atau ^^^xy!z
.
Itu karena garis set "var=%%a"
hanya aman dengan DisabledDelayedExpansion , jika tidak, tanda seru dihapus dan tanda sisipan digunakan sebagai karakter escape (sekunder) dan juga dihapus.
Tetapi menggunakan variabel var
hanya aman dengan EnabledDelayedExpansion , karena bahkan call %%var%%
akan gagal dengan konten seperti "&"&
.
EDIT: Menambahkan varian set / p
Ada cara kedua untuk membaca file dengan set /p
, satu-satunya kelemahan adalah bahwa itu dibatasi hingga ~ 1024 karakter per baris dan menghapus karakter kontrol di akhir baris.
Tetapi keuntungannya adalah, Anda tidak memerlukan toggling yang tertunda dan lebih mudah untuk menyimpan nilai dalam variabel
@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!
)
)
Untuk membacanya "biner" menjadi representasi hex
Anda dapat melihat SO: mengonversi file biner ke representasi HEX menggunakan file batch
set /p
. Saya biasa set /p value=< result.txt
mendapatkan baris pertama dari file teks
0x1A
? tidak for /F
berperilaku dengan cara yang sama seperti dengan NUL ( 0x00
) karakter?
:
atau ;
atau mengandung!
Salah satu cara yang sangat mudah untuk melakukannya adalah dengan menggunakan perintah berikut:
set /p mytextfile=< %pathtotextfile%\textfile.txt
echo %mytextfile%
Ini hanya akan menampilkan baris pertama teks dalam file teks. Cara lain Anda dapat melakukannya adalah menggunakan perintah berikut:
type %pathtotextfile%\textfile.txt
Ini akan menempatkan semua data dalam file teks di layar. Semoga ini membantu!
Ada banyak cara berbeda tetapi jika Anda hanya ingin MENAMPILKAN teks dan tidak MENYIMPANnya di mana saja maka Anda cukup menggunakan: findstr /v "randomtextthatnoonewilluse" filename.txt
Kode yang diperbaiki:
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=
dan delims=
tidak berguna, set line=%%a
harus menggunakan tanda kutip dan tanpa mengaktifkan mode perluasan tertunda, kode tidak dapat membaca tanda seru