kic1977
Goto Top

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

Content-Key: 144946

Url: https://administrator.de/contentid/144946

Printed on: April 19, 2024 at 22:04 o'clock

Member: bastla
bastla Jun 16, 2010 at 11:02:10 (UTC)
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
Mitglied: 77559
77559 Jun 16, 2010 at 11:15:47 (UTC)
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
Member: kic1977
kic1977 Jun 16, 2010 at 11:17:16 (UTC)
Goto Top
Wahnsinn, es klappt auf Anhieb.

Dankeschön bastla!
Mitglied: 77559
77559 Jun 16, 2010 at 11:26:58 (UTC)
Goto Top
Hallo bastla,

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

gruß
LotPings
Member: bastla
bastla Jun 16, 2010 at 14:16:07 (UTC)
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