Inhalt der gesamten Textdatei in eine Variable schreiben
Hallo,
ich brauche Hilfe bei einem - für mich - kniffligen Problem.
Ziel sollte es sein, daß ich alle Dateien eines Verzeichnisses an ein Programm weitergeben kann, das diese in einer Zeile haben will.
Also z.b.:
for /F %%m in ('dir /B /S c:\test\') DO set line=%%m %line%
%%m und %line werden scheinbar nach jedem FOR-Durchlauf gelöscht, womit ich immer nur die aktuelleste Datei in der Variable habe.
Könnte mir bitte jemand auf die Sprünge helfen?
Danke
mfg
ich brauche Hilfe bei einem - für mich - kniffligen Problem.
Ziel sollte es sein, daß ich alle Dateien eines Verzeichnisses an ein Programm weitergeben kann, das diese in einer Zeile haben will.
Also z.b.:
for /F %%m in ('dir /B /S c:\test\') DO set line=%%m %line%
%%m und %line werden scheinbar nach jedem FOR-Durchlauf gelöscht, womit ich immer nur die aktuelleste Datei in der Variable habe.
Könnte mir bitte jemand auf die Sprünge helfen?
Danke
mfg
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 144946
Url: https://administrator.de/forum/inhalt-der-gesamten-textdatei-in-eine-variable-schreiben-144946.html
Ausgedruckt am: 23.05.2025 um 00:05 Uhr
5 Kommentare
Neuester Kommentar
Hallo kic1977 und willkommen im Forum!
Die Begründung für diese Verhalten findest Du unter dem Stichwort "delayedExpansion" ...
So sollte es gehen:
Vorsichtig, wie ich nun mal bin, würde ich die Zeile 7 wohl eher so schreiben ([Edit] ... was auch Sinn macht, wenn LotPings unten gegebener Rat hinsichtlich "
Grüße
bastla
Die Begründung für diese Verhalten findest Du unter dem Stichwort "delayedExpansion" ...
So sollte es gehen:
@echo off & setlocal
for /f %%m in ('dir /s /b /a-d c:\test') do call :ProcessFile "%%m"
echo Starte Programm mit: %line%
goto :eof
:ProcessFile
set line=%~1 %line%
goto :eof
delims=
" befolgt wird ... [/Edit]):set line=%1 %line%
bastla

Hallo kic1977,
es gibt wie das Stichwort DelayedExpansion von bastla andeutet mehrere Varianten.
Alle sind aber begrenzt durch die je nach OS unterschieldiche maximale CMD-Zeilenlänge.
Wenn auch Dateinamen mit Leer-/Sonderzeichen möglich sind, solltest du beim For /f mit "tokens=*" oder "delims=" arbeiten und ggfs Anführungszeichen setzen.
Gruß
LotPings
es gibt wie das Stichwort DelayedExpansion von bastla andeutet mehrere Varianten.
Alle sind aber begrenzt durch die je nach OS unterschieldiche maximale CMD-Zeilenlänge.
Wenn auch Dateinamen mit Leer-/Sonderzeichen möglich sind, solltest du beim For /f mit "tokens=*" oder "delims=" arbeiten und ggfs Anführungszeichen setzen.
@Echo off
Set MyDir='dir /B /S C:\Test\'
Set "Line="
:: Variante 1
for /F %%m in (%MyDir%) DO call set line=%%m %%line%%
Echo 1.Line= %Line%
Set "Line="
:: Variante 2
for /F %%m in (%MyDir%) DO call :PrependLine %%m
Echo 2.Line= %Line%
Set "Line="
:: Variante 3
Setlocal EnableDelayedExpansion
for /F %%m in (%MyDir%) DO set line=%%m !line!
Echo 3.Line= %Line%
Goto :Eof
:PrependLine
Set Line=%1 %Line%
Goto :Eof
Gruß
LotPings

Hallo bastla,
ich gratuliere zum Level 5 IT-Administrator Experte !!!
gruß
LotPings
ich gratuliere zum Level 5 IT-Administrator Experte !!!
gruß
LotPings