Top-Themen

Aktuelle Themen (A bis Z)

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

Variablen innerhalb For-Schleife geben immer letzten Eintrag der Liste

Frage Entwicklung Batch & Shell

Mitglied: sisiphus

sisiphus (Level 1) - Jetzt verbinden

24.11.2010 um 23:16 Uhr, 4549 Aufrufe, 5 Kommentare

Ich möchte anhand einer Komma-getrennten Liste, Variablen in einer For-Schleife zusammen setzen, bekomme aber immer der Variable den letzen Eintrag der Liste... Was mache ich falsch?

Hallo,

Der folgende Schnipsel gibt mir zwar per echo c:/temp/%%i_programm.bat genau den Dateinamen an, den ich brauche. Aber sobald ich versuche den Pfad in eine Variable zu speichern erscheint immer nur ein zusammengeseztzte Zeile mit c:/temp/dk_programm.bat.

01.
@echo off 
02.
set LANGUAGES=de,en,es,dk 
03.
for %%i in (%LANGUAGES%) do ( 
04.
	echo c:/temp/%%i_programm.bat 
05.
	set LocalFile=c:/temp/%%i_programm.bat 
06.
	echo %LocalFile%  
07.
)
Weiß jemand Rat?

Danke
Sysiphus
Mitglied: 60730
24.11.2010 um 23:26 Uhr
moin,

entweder benutzt du DelayedExpansion, oder du nimmst den Bastla Weg, der den Trick 17 nimmt nicht innerhalb einer For Schleife (und damit in einer Zeile) etwas zu setzen und zu verwerten.

01.
:@echo off 
02.
set LANGUAGES=de,en,es,dk 
03.
for %%i in (%LANGUAGES%) do call :processlines %%i 
04.
goto eof 
05.
 
06.
:processlines 
07.
echo c:/temp/%1_programm.bat 
08.
	set LocalFile=c:/temp/%1_programm.bat 
09.
	echo %LocalFile%  
10.
:eof	 
11.
 
12.
pause
Gruß
Bitte warten ..
Mitglied: sisiphus
25.11.2010 um 19:34 Uhr
Danke!

Ich habe mich zunächt DelayedExpansion Expansion entschieden. Hat diese Methode gravierende Nachteile gegenüber "Trick 17"?
Gruß,
Bitte warten ..
Mitglied: pieh-ejdsch
25.11.2010 um 20:47 Uhr
moin miteinander,

@sisphus

der einzige Nachteil von "Setlocal EnableDelayedExpansion" ist, dass AusrufeZeichen im Ergebnis (in der For-Variable) eines Satzes der Forschleife fehlen.
wenn Du die AusrufeZeichen in der For-Variable wiederhaben möchtest muss Du "Endlocal" vorher ausführen.
wenn "Setlocal EnableDelayedExpansion" innerhalb der For-Schleife gemacht wird - erst nach dem "Endlocal" Befehl die For-Variable in eine UmgebungsVariable speichern - sonst ist sie nach Beendigung der For-Schleife nicht mehr gesetzt.

nach Ende der For-Schleife wirst Du immer nur eine gesetzte Variable haben, weil Du ja die vorhergehenden wieder überschreibst.

gegenüber "Trick17" ist die "DelayedExpansion" marginal schneller.

Gruß Phil
Bitte warten ..
Mitglied: Biber
25.11.2010 um 21:21 Uhr
Moin sissisfuss,


Zitat von pieh-ejdsch:
gegenüber "Trick17" ist die "DelayedExpansion" marginal schneller.

Gruß Phil
Noch marginal schneller wäre eine Änderung der Strategie:
[Demo am CMD-Prompt; die erste Zeile ist der Befehl, der bitte ohne ">" eingegeben werden sollte]
>@(for %i in (de,en,es,dk) do @set "LocalFile_%i=c:\temp\%i_programm.bat" ) & set localfile 
LocalFile_de=c:\temp\de_programm.bat 
LocalFile_dk=c:\temp\dk_programm.bat 
LocalFile_en=c:\temp\en_programm.bat 
LocalFile_es=c:\temp\es_programm.bat
Wenn diese %LOCALFILE%-Variablen einmal gesetzt sind, dann kann ebenso wieder auch an jeder Stelle des Batch-Schnipsel bei Bedarf eine "universelle Variable" %localfile% gebildet werden, falls dieser Code jetzt schon existiert und mit %localfile% weiterverwendet werden soll.
01.
:: und dann erst wird EnableDelayedExpansion sexy 
02.
.... 
03.
:: im Bätschelchen 
04.
 
05.
FOR %%i in (de,en,es,dk) do set "localfile=!localfile_%%i!" &  call :aYellowSubroutine [Localfile=] !localfile! 
06.
goto :eof 
07.
 
08.
:aYellowsubroutine 
09.
:: Annahme - diese Routine existiert & funktioniert schon heute,  
10.
:: aber eben mit der Variablen %localfile% 
11.
machwasmit %Localfile% 
12.
.... 
13.
goto :eof
Auch hier wieder Demo am CMD-Prompt:
(=21:18:11  D:\temp=) 
>@for %i in (de,en,es,dk) do @set "localfile=!localfile_%i!" & echo call :aYellowSubroutine [Localfile=] !localfile! 
call :aYellowSubroutine [Localfile=] c:\temp\de_programm.bat 
call :aYellowSubroutine [Localfile=] c:\temp\en_programm.bat 
call :aYellowSubroutine [Localfile=] c:\temp\es_programm.bat 
call :aYellowSubroutine [Localfile=] c:\temp\dk_programm.bat
Nur - wenn wir das so durchgespielt haben, dann erkennen wir doch, dass sowohl das Setzen EINER Variablen wie auch das Setzen von FÜNF Variablen %Localfile_xy% überflüssig ist.
Es liesse sich ohne irgendwelche Informationsverluste auch ganz mit den dynamischen Laufvariablen %%i abfackeln.

Grüße
Biber
Bitte warten ..
Mitglied: sisiphus
26.11.2010 um 01:43 Uhr
Wow! Ich bin wieder beeindruckt von der Hilfsbereitschaft und Kompetenz in diesem Forum!
Gruß, Sisyphus
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
FOR Variable nur letzter Ordner
gelöst Frage von mc-doubleyouBatch & Shell6 Kommentare

Hallo zusammen, ich möchte mit PneumaticTube Daten auf meine Dropbox laden. Der Programmierer hat mir dann vorgeschlagen ich soll ...

Batch & Shell
Weitergabe von Variablen in for-Schleifen
Frage von MFJustBatch & Shell1 Kommentar

Hallo, Ich versuche HTML Dateien in PDFs umzuwandeln (dies funktioniert) und diese dabei nach Teilen dieser HTML Datei umzubenennen ...

Batch & Shell
Batch Variablen in for-Schleife
gelöst Frage von Dacki1107Batch & Shell2 Kommentare

Hallo Liebe Administratoren Ich kämpfe mit einem kleinen Problemchen und hoffe das Ihr mir helfen könnt. Ich versuche eine ...

Batch & Shell
For schleife mit variablem inhalt
gelöst Frage von Tealk144Batch & Shell5 Kommentare

Hallo zusammen, kann ich in einer Batch Datei folgendes schreiben? for Variable in Satz do ( if exist %buchstabe%: ...

Neue Wissensbeiträge
Apple

IOS 11.2.1 stopft HomeKit-Remote-Lücke

Tipp von BassFishFox vor 8 StundenApple

Das Update für iPhone, iPad und Apple TV soll die Fernsteuerung von Smart-Home-Geräten wieder in vollem Umfang ermöglichen. Apple ...

Windows 10

Windows 10 v1709 EN murkst bei den Regionseinstellungen

Tipp von DerWoWusste vor 13 StundenWindows 10

Dieser kurze Tipp richtet sich an den kleinen Personenkreis, der Win10 v1709 EN-US frisch installiert und dabei die englische ...

Webbrowser

Kein Ton bei Firefox Quantum über RDP

Tipp von Moddry vor 13 StundenWebbrowser

Hallo Kollegen! Hatte das Problem, dass der neue Firefox bei mir auf der Kiste keinen Ton hat, wenn ich ...

Internet

EU-DSGVO: WHOIS soll weniger Informationen liefern

Information von sabines vor 1 TagInternet4 Kommentare

Wegen der europäische Datenschutzgrundverordnung stehen die Prozesse um die Registrierung von Domains auf dem Prüfstand. Sollte die Forderungen umgesetzt ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
Von rj11 auf rj45
Frage von jensgebkenLAN, WAN, Wireless19 Kommentare

Hallo Gemeinschaft, könnt ihr mir vielleicht bei der anfertigung eines Kabels helfen - habe ein rj 11 stecker und ...

Netzwerkmanagement
Firefox Profieles im Roaming
gelöst Frage von Hendrik2586Netzwerkmanagement17 Kommentare

Hallo liebe Leute. :) Ich hab da ein kleines Problem, welches anscheinend nicht unbekannt ist. Wir nutzen hier in ...

LAN, WAN, Wireless
Häufig Probleme beim Anmelden in WLAN
Frage von mabue88LAN, WAN, Wireless15 Kommentare

Hallo zusammen, in einem Netzwerk gibt es relativ häufig (1-2 mal pro Woche) Probleme mit der WLAN-Verbindung. Zunächst mal ...

Windows Server
Remotesteuerung der Sitzung (Kennung XX) fehlgeschlagen
gelöst Frage von Stefan91Windows Server14 Kommentare

Hallo Zusammen, seit kurzem bekomme ich oben genannte Fehlermeldung, wenn ich versuche eine Remotesitzung über den Taskmanager fernzusteuern (Rechtsklick ...