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
GELÖST

Mehrere Strings in FOR Schleife abarbeiten ohne eine Datei zu lesen

Frage Entwicklung Batch & Shell

Mitglied: RaidMan

RaidMan (Level 1) - Jetzt verbinden

05.08.2013 um 10:57 Uhr, 1980 Aufrufe, 15 Kommentare, 3 Danke

Hallo Kenner und Könner

ich möchte in einer FOR Schleife 8 verschiedene Strings (*.ext) unter der selben Variablen abarbeiten,
normalerweise würde man jetzt wohl zB eine "string.txt" erzeugen und Die dann zeilenweise auslesen
in etwa so
01.
FOR /F "tokens=*" %%a IN (string.txt) do ( 
02.
echo %%a 
03.
04.
pause

ich möchte das selbe Verhalten erreichen allerdings ohne eine Datei lesen zu müssen,
sondern die strings sollen in der Batch datei definiert werden

01.
FOR /F "tokens=1-5 delims=;" %%a IN ("*.ex1;*.ex2;*.ex3;*.ex4;*.ex5") do ( 
02.
echo %%a 
03.
04.
pause
funktioniert leider nicht weil jede ext eine eigene Variable wird

Die Frage ist nun kommt man überhaupt ohne Hilfsdatei aus, wenn ja wie?

und schon mal danke fürs lesen

Gruß
RaidMan
Mitglied: bastla
05.08.2013, aktualisiert um 11:10 Uhr
Hallo Raidman!

Was soll denn danach mit den einzelnen Strings passieren? Wegen des "*" würden die Strings in einer "for" (ohne "/f")-Schleife als Suchmuster für Dateien interpretiert werden ...

Grüße
bastla
Bitte warten ..
Mitglied: colinardo
05.08.2013 um 11:09 Uhr
Hallo RaidMan,
z.B. so:
01.
@echo off & setlocal ENABLEDELAYEDEXPANSION 
02.
set NL=^ 
03.
 
04.
 
05.
set "string=*.ex1!NL!*.ex2!NL!*.ex3!NL!*.ex4!NL!*.ex5" 
06.
for /f "tokens=* delims=" %%k in ("!string!") DO @( 
07.
	echo %%k 
08.
)
Grüße Uwe
Bitte warten ..
Mitglied: bastla
05.08.2013 um 11:26 Uhr
@ colinardo
Clever ...

Grüße
bastla
Bitte warten ..
Mitglied: RaidMan
05.08.2013 um 11:26 Uhr
Hallo bastla

danke für die schnelle Antwort könnte schon die Lösung sein
würde jede einzelne String einen Durchlauf generieren oder einen gemeinsamen?
muss ich gleich mal test

es soll im weiteren tatsächlich nach den Strings gesucht bzw auf vorhandensein solcher Dateien geprüft werden
01.
if exist "path"\%%a 
RaidMan
Bitte warten ..
Mitglied: bastla
05.08.2013, aktualisiert um 23:22 Uhr
Hallo RaidMan!

Wenn es ohnehin um die Dateien geht, kannst Du ja gleich
01.
for %%a in ("path\*.ext1" "path\*.ext2" "path\*.ext3") do ( 
02.
   echo Verarbeite "%%a" 
03.
)
verwenden ...

... oder, falls auch noch mehrere Pfade gefragt sind und verschachtelt werden soll, einfach nur die einzelnen Extensions in der Schleife angeben (ungetestet):
01.
for %%e in (ext1 ext2 ext3) do ( 
02.
   for %%f in ("path1\*.%%e" "path2\*.%%e" "path3\*.%%e") do ( 
03.
       echo Verarbeite "%%f" 
04.
05.
)
Grüße
bastla

[Edit] "Schachtel"-Variante hinzugefügt [/Edit]
Bitte warten ..
Mitglied: RaidMan
05.08.2013, aktualisiert um 11:36 Uhr
Hallo Uwe

auch Dir dank für den Quicky

sieht auf den ersten Blick genau danach aus was ich erreichen wollte
nur ist grad ne Nummer zu hoch für mich

was ist set NL=^

und war da nicht was mit set funktioniert nicht richtig in FOR Schleifen
aber das wird mit ENABLEDELAYEDEXPANSION korigiert ?

RaidMan
Bitte warten ..
Mitglied: colinardo
05.08.2013, aktualisiert um 11:43 Uhr
Zitat von RaidMan:
was ist set NL=^
das ist ein Zeilenumbruch (die zwei Leerzeilen danach müssen so bleiben, die gehören dazu). Dieser funktioniert nur im Zusammenhang mit "delayed expansion". Dieser trennt dann deine einzelnen Strings mit Zeilenumbrüchen !NL! voneinander.
Weitere Erläuterungen zu Delayed Expansion findest du hier , das musste ich leider schon zu oft runterbeeten .
Bitte warten ..
Mitglied: Endoro
05.08.2013 um 12:38 Uhr
Hi,
01.
@ECHO OFF &SETLOCAL 
02.
FOR %%a IN ( 
03.
	.ex1 
04.
	.ex2 
05.
	.ex3 
06.
	.ex4 
07.
	.ex5 
08.
	) DO ( 
09.
  IF EXIST "mypath\*%%a" ECHO %%a exists. 
10.
)
.. just my 2ct
Bitte warten ..
Mitglied: 112778
05.08.2013, aktualisiert um 17:10 Uhr
Zitat von bastla:
@ colinardo
Clever ...


Hi,

wieso clever? Clever ist an dem NL-Trick imo nichts.

Warum in die Ferne schweifen und mit teils abenteuerlichen Lösungen aufwarten, die selten jemand versteht?
Unter Windows gibt es die Registry, die alle Werte für das Environment erzeugt und in der man eigene Variablen unterbringen kann, die dann nach dem Start des OS oder nach Änderung in den Einstellungen in der Systemsteuerung für das Environment sofort zur Verfügung stehen.
Allerdings muss vorher die Konsole geschlossen werden, da das alte Environment sonst bis zum erneuten Öffnen der Konsole noch gültig bleibt.
Für Spezialzeichen bietet sich der Typ REG_EXPAND_SZ geradezu an. Die in der Registry eingetragnen Variablen bleiben auch dauerhaft so lange erhalten, bis man sie wieder löscht.

Spezialzeichen_ins_Environment_eintragen.reg
01.
REGEDIT4 
02.
 
03.
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment] 
04.
"NL"=hex(2):0d,0a,00 
05.
"CR"=hex(2):0d,00 
06.
"LF"=hex(2):0a,00 
07.
"TAB"=hex(2):09,00 
08.
"BS"=hex(2):20,08,08,00 
09.
"BELL"=hex(2):07,00 
10.
 

Nur für die nächsten 3 ist SETLOCAL ENABLEDELAYEDEXPANSION und das "!" erforderlich, die anderen funktionierten auch ohne die verzögerte Variablenverabeitung und mit "%".
CR = Wagenrücklauf, bleibt in der Zeile
LF = Zeilenvorschub
NL = Neue Zeile (CR+LF)
bS = Backspace/Rücktaste
TAB = TAbulator
BELL = Piepton, falls der Dienst "BEEP" und ein Lautsprecher aktiv sind


Und die TEST.CMD dazu zum Testen:
01.
::Test für Spezialzeichen 
02.
@echo off & setlocal ENABLEDELAYEDEXPANSION 
03.
echo bla !LF!!LF!bla 
04.
echo bla !NL!!NL!blubber 
05.
echo bla !CR!blubb 
06.
@echo 1234567%BS%%BS%2 
07.
echo bla%TAB%bla%TAB%blubb 
08.
Pause
Gruß
Bitte warten ..
Mitglied: bastla
05.08.2013 um 17:07 Uhr
@ EisPott
wieso clever?
Bezog sich auf das Trennen der Einzelstrings durch Zeilenschaltungen - fandest Du die Idee nicht gut?

Grüße
bastla
Bitte warten ..
Mitglied: 112778
05.08.2013, aktualisiert um 23:23 Uhr
Die Trennung durch Zeilenschaltungen ist schon ok und gut, meine Kritik bezog sich lediglich auf das Tricksen mit der Erzeugung der Zeilenschaltung.
Bitte warten ..
Mitglied: AlbertMinrich
05.08.2013 um 23:02 Uhr
Zitat von RaidMan:
Hallo Kenner und Könner

ich möchte in einer FOR Schleife 8 verschiedene Strings (*.ext) unter der selben Variablen abarbeiten,
normalerweise würde man jetzt wohl zB eine "string.txt" erzeugen und Die dann zeilenweise auslesen
in etwa so
01.
> FOR /F "tokens=*" %%a IN (string.txt) do ( 
02.
> echo %%a 
03.
> ) 
04.
> pause 
05.
> 

ich möchte das selbe Verhalten erreichen allerdings ohne eine Datei lesen zu müssen,
sondern die strings sollen in der Batch datei definiert werden

01.
> FOR /F "tokens=1-5 delims=;" %%a IN ("*.ex1;*.ex2;*.ex3;*.ex4;*.ex5") do ( 
02.
> echo %%a 
03.
> ) 
04.
> pause 
05.
> 
funktioniert leider nicht weil jede ext eine eigene Variable wird



Kann es sein, daß du einfach nur sowas willst:
for %%i in (bli,bla,blu) do echo %%i
Bitte warten ..
Mitglied: Endoro
05.08.2013 um 23:19 Uhr
Zitat von AlbertMinrich:
Kann es sein, daß du einfach nur sowas willst:
for %%i in (bli,bla,blu) do echo %%i
ja, genauso isses .
Und wenn du statt Komma einen line break machst, erhälst du die oben von mir gepostete Schleife
lg.
Bitte warten ..
Mitglied: bastla
05.08.2013 um 23:24 Uhr
... und bei Leerzeichen etwas in der Art wie noch weiter oben ...

Grüße
bastla
Bitte warten ..
Mitglied: RaidMan
06.08.2013, aktualisiert um 09:49 Uhr
Moin Leutz

hehehe hier wird man ja echt gepampert
ich bin noch an experimentieren wie es am besten funktioniert
(es tauchen leider immer neue Unschönheiten in der Batch auf)

Aber für mich als Batch-Bastler ist die Variante von Endore ersteinmal am übersichtlichsten
01.
@ECHO OFF &SETLOCAL 
02.
FOR %%a IN ( 
03.
	.ex1 
04.
	.ex2 
05.
	.ex3 
06.
	.ex4 
07.
	.ex5 
08.
	) DO ( 
09.
  IF EXIST "mypath\*%%a" ECHO %%a exists. 
10.
)
in der fertigen Batch wuerde ich dann wohl die Variante von AlberMinrich anwenden
01.
for %%i in (bli,bla,blu) do echo %%i
da die auf eine Zeile passt

allerbesten Dank an Alle

RaidMan
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(2)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

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

Frage von Haures zum Thema Windows Server ...

Outlook & Mail
Outlook 2010 findet ost datei nicht (18)

Frage von Floh21 zum Thema Outlook & Mail ...