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
War es hilfreich?

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top