Bir toplu iş dosyasından bir dosyayı (metin veya ikili) nasıl okuyabilirsiniz? İkili modda veya metin modunda okumanın bir yolu var mı?
TYPE [fileName]
MS-Dos komutunu kullanabilirsiniz .
Bir toplu iş dosyasından bir dosyayı (metin veya ikili) nasıl okuyabilirsiniz? İkili modda veya metin modunda okumanın bir yolu var mı?
TYPE [fileName]
MS-Dos komutunu kullanabilirsiniz .
Yanıtlar:
For komutunu kullanabilirsiniz:
FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k
Tür
for /?
komut isteminde. Ayrıca, ini dosyalarını ayrıştırabilirsiniz !
for /?
Komut gereğince , myfile.txt'deki her satırı, noktalı virgülle başlayan satırları yok sayarak, her satırdan 2. ve 3. belirteci virgül ve / veya boşluklarla ayrılmış simgelerle for gövdesine geçirerek ayrıştırır.
NT tarzı cmd.exe'nin altında, bir metin dosyasının satırları arasında geçiş yapabilirsiniz.
FOR /F %i IN (file.txt) DO @echo %i
Daha fazla bilgi için komut istemine "için yardım" yazın. (kullandığınız "DOS" da işe yarayıp yaramadığını bilmiyorum)
%%i
.
FOR-LOOP genellikle çalışır, ancak bazı sorunlar vardır. FOR boş satırları kabul etmez ve ~ 8190'dan fazla olan satırlar sorunludur. Genişletme, yalnızca gecikmeli genişletme devre dışı bırakılırsa güvenilir çalışır.
Tek LF'ye karşı CR / LF'nin tespiti de biraz karmaşık görünmektedir.
Ayrıca, FOR-Loop okumayı anında iptal ettiği için NUL karakterleri de sorunludur.
Doğrudan ikili okuma bu nedenle neredeyse imkansız görünmektedir.
Boş satırlarla ilgili problem bir hile ile çözülebilir. Findstr komutunu kullanarak her satırın önüne bir satır numarası ekleyin ve okuduktan sonra öneki kaldırın.
@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
)
!
Veya gibi dizelerle güvenli çalışma için etkinleştirilen ve devre dışı bırakılan gecikmeli genişletme arasında geçiş yapılması gerekir ^^^xy!z
.
Bunun nedeni, satırın set "var=%%a"
yalnızca DisabledDelayedExpansion ile güvenli olmasıdır , aksi takdirde ünlem işaretleri kaldırılır ve düzeltme işaretleri (ikincil) kaçış karakterleri olarak kullanılır ve bunlar da kaldırılır.
Ama değişkeni kullanarak var
sadece güvenlidir EnabledDelayedExpansion bile gibi call %%var%%
gibi içerikle başarısız olur "&"&
.
DÜZENLEME: set / p değişkeni eklendi
Bir dosyayı okumanın ikinci bir yolu var set /p
, tek dezavantajı satır başına ~ 1024 karakterle sınırlı olması ve satır sonunda kontrol karakterlerini kaldırmasıdır.
Ancak avantajı, gecikmeli geçişe ihtiyacınız olmaması ve değerleri değişkenlerde saklamanın daha kolay olmasıdır.
@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!
)
)
Onaltılık gösterime "ikili" okumak için SO'ya
bakabilirsiniz : toplu iş dosyasını kullanarak bir ikili dosyayı HEX gösterimine dönüştürme
set /p
. Ben kullanılan set /p value=< result.txt
bir metin dosyasından ilk satırı almak
0x1A
? yok for /F
NUL (ile aynı şekilde davranacaktır 0x00
) karakterler?
:
ya ;
ya içerirler!
Bunu yapmanın çok kolay bir yolu aşağıdaki komutu kullanmaktır:
set /p mytextfile=< %pathtotextfile%\textfile.txt
echo %mytextfile%
Bu, bir metin dosyasındaki metnin yalnızca ilk satırını görüntüler. Bunu yapmanın diğer yolu aşağıdaki komutu kullanmaktır:
type %pathtotextfile%\textfile.txt
Bu, tüm verileri ekrandaki metin dosyasına koyacaktır. Bu yardımcı olur umarım!
Pek çok farklı yol var, ancak metni yalnızca GÖRÜNTÜLEMEK ve herhangi bir yerde DEPOLAMAK istemiyorsanız, yalnızca şunu kullanın: findstr /v "randomtextthatnoonewilluse" filename.txt
Düzeltilmiş kod:
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=
ve delims=
gereksiz, set line=%%a
tırnak kullanmalı ve gecikmeli genişletme modunu değiştirmeden kod ünlem işaretlerini okuyamıyor