kic1977

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
Auf Facebook teilen
Auf X (Twitter) teilen
Auf Reddit teilen
Auf Linkedin teilen

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

bastla
bastla 16.06.2010 um 13:02:10 Uhr
Goto Top
Hallo kic1977 und willkommen im Forum!

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
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 "delims=" befolgt wird ... [/Edit]):
set line=%1 %line%
Grüße
bastla
77559
77559 16.06.2010 um 13:15:47 Uhr
Goto Top
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.

@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
kic1977
kic1977 16.06.2010 um 13:17:16 Uhr
Goto Top
Wahnsinn, es klappt auf Anhieb.

Dankeschön bastla!
77559
77559 16.06.2010 um 13:26:58 Uhr
Goto Top
Hallo bastla,

ich gratuliere zum Level 5 IT-Administrator Experte !!!

gruß
LotPings
bastla
bastla 16.06.2010 um 16:16:07 Uhr
Goto Top
Hallo LotPings!
ich gratuliere zum Level 5 IT-Administrator Experte !!!
Danke Dir - ist aber de facto nicht wirklich ein Hinweis auf "Expertentum" ...

Grüße
bastla