Wie kann ich den ganzen Dateiinhalt einer Datei in eine Batch Variable einlesen?
Ich möchte gerne den Inhalt einer ganzen Datei einlesen, in 1 Variable. Das Ganze soll etwa so Ablaufen:
set /p CODE =< Code.txt (funktioniert nur bei 1. Zeile...)
%CODE% (Ausführung des Codes bzw. des Variableninhaltes)
Bin für Vorschläge offen
2 Antworten
![](https://images.gutefrage.net/media/default/user/14_nmmslarge.png?v=1551279448000)
Bernys Ansatz war richtig, allerdings musst du vorher "Setlocal EnableDelayedExpansion" benutzen, damit du die Variable in der FOR-Schleife weiterverarbeiten kannst:
Setlocal EnableDelayedExpansion
set LF=^
FOR /F "delims=" %%A IN (Datei) DO set Inhalt=!Inhalt!!LF!%%A
echo !Inhalt!
Das "LF" dient dazu, Zeilenumbrücke mit zu übergeben. Die beiden Zeilen darunter müssen frei bleiben, damit es funktioniert.
![](https://images.gutefrage.net/media/default/user/14_nmmslarge.png?v=1551279448000)
Das Verwenden von Variablen als Code geht nur mit %-Zeichen, da funktionieren !-Zeichen nicht.
Das Speichern von Text mit Zeilenumbruch ist aber nur in einer !-Variable möglich, nicht in %-Variablen.. Dir bleibt nur, jede Zeile mit einem & zu verknüpfen, wodurch aber einige Funktionen des Codes verloren gehen könnten:
Setlocal EnableDelayedExpansion
FOR /F "delims=" %%A IN (Datei) DO set Inhalt=!Inhalt!%%A^&
set Inhalt=!Inhalt!
%Inhalt%
Alternativ kannst du die auszulesende Datei als .bat speichern und dann per CALL aufrufen:
call Datei.bat
Die Variablen der Hauptdatei werden mitübergeben, allerdings kannst du keine Variablen speichern lassen.
![](https://images.gutefrage.net/media/user/Berny96/1459036936798_nmmslarge__10_10_180_180_41891bff6619e836b62841f69ed73f09.png?v=1459036939000)
set content=
for /f "delims=" %%i in ('filename') do set content=%content% %%i
![](https://images.gutefrage.net/media/user/Proximus553/1462049063385_nmmslarge__0_238_640_640_eee749e348aa57049d211b1ceb45efe5.jpg?v=1462049063000)
Das liest leider nur die letzte Zeile ein, daher ist
%CODE%
unmöglich...
Das ausführen des Codes durch:
geht leider nicht, irgendwelche Ideen?