Wie kann ich den Inhalt einer Textdatei in eine Batch-Datei Variable laden?
-
02-07-2019 - |
Frage
Ich muss in der Lage sein, den gesamten Inhalt einer Textdatei zu laden und es in eine Variable für die Weiterverarbeitung zu laden.
Wie kann ich das tun?
Hier ist, was ich tat, dank Roman Odaisky Antwort.
SetLocal EnableDelayedExpansion
set content=
for /F "delims=" %%i in (test.txt) do set content=!content! %%i
echo %content%
EndLocal
Lösung
Mit for
, etwas entlang der Linien von:
set content=
for /f "delims=" %%i in ('filename') do set content=%content% %%i
Vielleicht werden Sie setlocal enabledelayedexpansion
zu tun haben, und / oder !content!
verwenden, anstatt %content%
. Ich kann nicht testen, da ich in der Nähe kein MS Windows (und ich wünsche Ihnen gleich: -).
Die beste Batch-Datei-black-magic-Referenz, die ich kenne, ist unter http: //www.rsdn.ru/article/winshell/batanyca.xml . Wenn Sie nicht wissen, Russisch, konnte man noch einige Verwendung der Code-Schnipsel machen zur Verfügung gestellt.
Andere Tipps
Wenn Ihr Set-Befehl den Schalter / p unterstützt, dann können Sie Pipeeingabe auf diese Weise.
set /p VAR1=<test.txt
set /? | Finden "/ P"
Der / P-Schalter können Sie den Wert einer Variablen zu einer Linie von setzen Eingabe durch den Benutzer eingegeben. Zeigen die angegebenen Eingabeaufforderungs vor Lesen der Eingabezeile. Die Eingabeaufforderungs können leer sein.
Dies hat den zusätzlichen Vorteil der un-registrierten Dateitypen für die Arbeit (die die akzeptierte Antwort nicht).
Sie können mit:
set content=
for /f "delims=" %%i in ('type text.txt') do set content=!content! %%i
Können Sie die weitere Verarbeitung definieren?
Sie können eine for-Schleife verwenden, um diese fast zu tun, aber es gibt keine einfache Möglichkeit, CR / LF in eine Umgebungsvariable einzufügen, so dass Sie alles in einer Zeile haben werden. (Sie können möglicherweise um je nach dem arbeiten, was Sie tun müssen.)
Sie sind auch auf weniger als etwa 8k Textdateien auf diese Weise beschränkt. (Sie können nicht ein einziges env var größer als etwa 8k erstellen.)
Bill Vorschlag einer for-Schleife ist wahrscheinlich das, was Sie brauchen. Sie bearbeiten die Datei eine Zeile zu einem Zeitpunkt:
(Verwendung %i
an einer Befehlszeile %%i
in einer Batch-Datei)
for /f "tokens=1 delims=" %%i in (file.txt) do echo %%i
weiter fortgeschritten:
for /f "tokens=1 delims=" %%i in (file.txt) do call :part2 %%i
goto :fin
:part2
echo %1
::do further processing here
goto :eof
:fin
Erstellen Sie eine Datei namens „SetFile.bat“, die die folgende Zeile enthält mit kein Wagenrücklauf am Ende des es ...
set FileContents=
Dann in Batch-Datei so etwas tun ...
@echo off
copy SetFile.bat + %1 $tmp$.bat > nul
call $tmp$.bat
del $tmp$.bat
% 1 ist der Name Ihrer Eingabedatei und% Dateiinhalt% wird der Inhalt der Eingabedatei nach dem Aufruf enthalten. Dies funktioniert nur, wenn auf eine Datei eine Zeile (das heißt eine Datei keine Zeilenumbrüche enthält). Sie könnten Wagenrücklauf aus der Datei Streifen aus / ersetzen, bevor bei Bedarf die% tmp% .bat aufrufen.
for /f "delims=" %%i in (count.txt) do set c=%%i
echo %c%
pause