Wie können Sie eine Datei (Text oder Binärdatei) aus einer Batchdatei lesen? Gibt es eine Möglichkeit, es im Binär- oder Textmodus zu lesen?
TYPE [fileName]
für MS-Dos verwenden.
Wie können Sie eine Datei (Text oder Binärdatei) aus einer Batchdatei lesen? Gibt es eine Möglichkeit, es im Binär- oder Textmodus zu lesen?
TYPE [fileName]
für MS-Dos verwenden.
Antworten:
Sie können den Befehl for verwenden:
FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k
Art
for /?
an der Eingabeaufforderung. Sie können auch INI-Dateien analysieren !
for /?
dem Befehl wird jede Zeile in myfile.txt analysiert, wobei Zeilen, die mit einem Semikolon beginnen, ignoriert werden und das 2. und 3. Token von jeder Zeile an den for-Body übergeben werden, wobei Token durch Kommas und / oder Leerzeichen getrennt sind.
Unter cmd.exe im NT-Stil können Sie die Zeilen einer Textdatei mit durchlaufen
FOR /F %i IN (file.txt) DO @echo %i
Geben Sie an der Eingabeaufforderung "help for" ein, um weitere Informationen zu erhalten. (Ich weiß nicht, ob das unter dem von Ihnen verwendeten "DOS" funktioniert.)
%%i
.
Die FOR-LOOP funktioniert im Allgemeinen, es gibt jedoch einige Probleme. Das FOR akzeptiert keine Leerzeilen und Zeilen mit mehr als ~ 8190 sind problematisch. Die Erweiterung funktioniert nur dann zuverlässig, wenn die verzögerte Erweiterung deaktiviert ist.
Der Nachweis von CR / LF gegenüber einfachem LF scheint ebenfalls etwas kompliziert zu sein.
Auch NUL-Zeichen sind problematisch, da eine FOR-Schleife das Lesen sofort abbricht.
Ein direktes binäres Lesen scheint daher nahezu unmöglich.
Das Problem mit leeren Zeilen kann mit einem Trick gelöst werden. Stellen Sie jeder Zeile mit dem Befehl findstr eine Zeilennummer voran und entfernen Sie nach dem Lesen das Präfix.
@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
)
Das Umschalten zwischen aktivierter und deaktivierter verzögerter Erweiterung ist für das sichere Arbeiten mit Zeichenfolgen wie !
oder erforderlich^^^xy!z
. Dies liegt
daran, dass die Zeile set "var=%%a"
nur mit DisabledDelayedExpansion sicher ist. Andernfalls werden Ausrufezeichen entfernt und die Carets als (sekundäre) Escape-Zeichen verwendet und auch entfernt.
Die Verwendung der Variablen var
ist jedoch nur mit EnabledDelayedExpansion sicher , da selbst a call %%var%%
mit Inhalten wie fehlschlägt "&"&
.
BEARBEITEN: Set / p-Variante hinzugefügt
Es gibt eine zweite Möglichkeit, eine Datei mit zu lesen set /p
. Die einzigen Nachteile sind, dass sie auf ~ 1024 Zeichen pro Zeile begrenzt ist und Steuerzeichen am Zeilenende entfernt werden.
Der Vorteil ist jedoch, dass Sie das verzögerte Umschalten nicht benötigen und es einfacher ist, Werte in Variablen zu speichern
@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!
)
)
Zum Lesen von "binär" in eine Hex-Darstellung
Sie können sich SO ansehen : Konvertieren einer Binärdatei in eine HEX-Darstellung mithilfe einer Batch-Datei
set /p
. Ich habe set /p value=< result.txt
die erste Zeile aus einer Textdatei
0x1A
? verhält for /F
sich genauso wie bei NUL ( 0x00
) Zeichen?
:
oder ;
oder beginnen!
Eine sehr einfache Möglichkeit ist die Verwendung des folgenden Befehls:
set /p mytextfile=< %pathtotextfile%\textfile.txt
echo %mytextfile%
Dadurch wird nur die erste Textzeile in einer Textdatei angezeigt. Die andere Möglichkeit besteht darin, den folgenden Befehl zu verwenden:
type %pathtotextfile%\textfile.txt
Dadurch werden alle Daten in der Textdatei auf dem Bildschirm angezeigt. Hoffe das hilft!
Nun, es gibt viele verschiedene Möglichkeiten, aber wenn Sie den Text nur ANZEIGEN und nirgendwo speichern möchten, verwenden Sie einfach: findstr /v "randomtextthatnoonewilluse" filename.txt
Korrigierter Code:
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=
und delims=
sind überflüssig, set line=%%a
sollten Anführungszeichen verwenden und ohne den verzögerten Erweiterungsmodus umzuschalten, kann der Code keine Ausrufezeichen lesen
Ein Code, der den Inhalt der Datei myfile.txt auf dem Bildschirm anzeigt
setze% filecontent% = 0
type% filename% >>% filecontent%
echo% filecontent%