Jak odczytać plik (tekstowy lub binarny) z pliku wsadowego? Czy jest sposób na odczytanie go w trybie binarnym lub tekstowym?
file
batch-file
Lucas Gabriel Sánchez
źródło
źródło
TYPE [fileName]
dla MS-Dos.Odpowiedzi:
Możesz użyć polecenia for:
Rodzaj
w wierszu polecenia. Możesz także analizować pliki ini !
źródło
for /?
z poleceniem przeanalizowałoby każdą linię w myfile.txt, ignorując wiersze zaczynające się od średnika, przekazując drugi i trzeci token z każdego wiersza do for body, z tokenami oddzielonymi przecinkami i / lub spacjami.W programie cmd.exe w stylu NT można przeglądać wiersze pliku tekstowego za pomocą
Aby uzyskać więcej informacji, wpisz „pomoc dla” w wierszu polecenia. (nie wiem, czy to działa w jakimkolwiek systemie „DOS”, którego używasz)
źródło
%%i
.FOR-LOOP generalnie działa, ale są pewne problemy. FOR nie akceptuje pustych wierszy, a wiersze zawierające więcej niż ~ 8190 są problematyczne. Rozszerzenie działa niezawodnie tylko wtedy, gdy opóźnione rozszerzenie jest wyłączone.
Wykrywanie CR / LF w porównaniu z pojedynczym LF również wydaje się nieco skomplikowane.
Również znaki NUL są problematyczne, ponieważ pętla FOR natychmiast anuluje odczyt.
Dlatego bezpośredni odczyt binarny wydaje się prawie niemożliwy.
Problem z pustymi liniami można rozwiązać sztuczką. Przedrostek każdego wiersza numerem wiersza za pomocą polecenia findstr i po przeczytaniu usuń przedrostek.
Przełączanie między włączaniem a wyłączaniem opóźnionej ekspansji jest konieczne do bezpiecznego działania z ciągami, takimi jak
!
lub^^^xy!z
. Dzieje się tak, ponieważ linia
set "var=%%a"
jest bezpieczna tylko z DisabledDelayedExpansion , w przeciwnym razie wykrzykniki są usuwane, a daszki są używane jako (drugorzędne) znaki zmiany znaczenia i są również usuwane.Ale używanie zmiennej
var
jest bezpieczne tylko w przypadku EnabledDelayedExpansion , ponieważ nawetcall %%var%%
nie powiedzie się w przypadku zawartości takiej jak"&"&
.EDYCJA: Dodano wariant set / p
Istnieje drugi sposób odczytu pliku
set /p
, jedynymi wadami jest to, że jest on ograniczony do ~ 1024 znaków na linię i usuwa znaki sterujące na końcu linii.Ale zaletą jest to, że nie potrzebujesz opóźnionego przełączania i łatwiej jest przechowywać wartości w zmiennych
Aby odczytać to "binarnie" na reprezentację szesnastkową
Możesz spojrzeć na SO: konwersja pliku binarnego na reprezentację HEX przy użyciu pliku wsadowego
źródło
set /p
. Użyłemset /p value=< result.txt
pobrać pierwszą linię z pliku tekstowego0x1A
? niefor /F
zachowują się w ten sam sposób jak przy NUL (0x00
) znaków?:
lub;
lub zawierają!
Jednym z bardzo łatwych sposobów jest użycie następującego polecenia:
Spowoduje to wyświetlenie tylko pierwszej linii tekstu w pliku tekstowym. Innym sposobem, w jaki możesz to zrobić, jest użycie następującego polecenia:
Spowoduje to umieszczenie wszystkich danych w pliku tekstowym na ekranie. Mam nadzieję że to pomoże!
źródło
Cóż, istnieje wiele różnych sposobów, ale jeśli chcesz tylko WYŚWIETLIĆ tekst, a nie przechowywać go nigdzie, po prostu użyj:
findstr /v "randomtextthatnoonewilluse" filename.txt
źródło
Poprawiony kod:
źródło
eol=
idelims=
jest zbędny,set line=%%a
powinien używać cudzysłowów i bez przełączania trybu opóźnionego rozwinięcia, kod nie może odczytać wykrzyknikówKod, który wyświetla zawartość pliku myfile.txt na ekranie
set% filecontent% = 0
type% filename% >>% filecontent%
echo% filecontent%
źródło