Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Inhalt der gesamten Textdatei in eine Variable schreiben

Frage Entwicklung Batch & Shell

Mitglied: kic1977

kic1977 (Level 1) - Jetzt verbinden

16.06.2010 um 12:17 Uhr, 2184 Aufrufe, 5 Kommentare

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
Mitglied: bastla
16.06.2010 um 13:02 Uhr
Hallo kic1977 und willkommen im Forum!

Die Begründung für diese Verhalten findest Du unter dem Stichwort "delayedExpansion" ...

So sollte es gehen:
01.
@echo off & setlocal 
02.
for /f %%m in ('dir /s /b /a-d c:\test') do call :ProcessFile "%%m" 
03.
echo Starte Programm mit: %line% 
04.
goto :eof 
05.
 
06.
:ProcessFile 
07.
set line=%~1 %line% 
08.
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
Bitte warten ..
Mitglied: LotPings
16.06.2010 um 13:15 Uhr
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.

01.
@Echo off 
02.
Set MyDir='dir /B /S C:\Test\' 
03.
Set "Line=" 
04.
:: Variante 1 
05.
for /F %%m in (%MyDir%) DO call set line=%%m %%line%% 
06.
Echo 1.Line= %Line% 
07.
Set "Line=" 
08.
:: Variante 2 
09.
for /F %%m in (%MyDir%) DO call :PrependLine %%m 
10.
Echo 2.Line= %Line% 
11.
Set "Line=" 
12.
:: Variante 3 
13.
Setlocal EnableDelayedExpansion 
14.
for /F %%m in (%MyDir%) DO set line=%%m !line! 
15.
Echo 3.Line= %Line% 
16.
Goto :Eof 
17.
:PrependLine 
18.
Set Line=%1 %Line% 
19.
Goto :Eof
Gruß
LotPings
Bitte warten ..
Mitglied: kic1977
16.06.2010 um 13:17 Uhr
Wahnsinn, es klappt auf Anhieb.

Dankeschön bastla!
Bitte warten ..
Mitglied: LotPings
16.06.2010 um 13:26 Uhr
Hallo bastla,

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

gruß
LotPings
Bitte warten ..
Mitglied: bastla
16.06.2010 um 16:16 Uhr
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
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
gelöst Selected Gridview Value in Variable schreiben (4)

Frage von reissaus73 zum Thema Batch & Shell ...

Batch & Shell
gelöst Aktueller Besitzer der aktuellen Datei herausfinden und in Variable schreiben (11)

Frage von Peter32 zum Thema Batch & Shell ...

Batch & Shell
gelöst DWORD (Name immer verschieden) eines RegKeys auslesen und in Variable schreiben (2)

Frage von reissaus73 zum Thema Batch & Shell ...

Batch & Shell
gelöst Mehrere Ordnernamen auslesen und in eine Variable schreiben (5)

Frage von schmitho zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (19)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...