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

Frage zur Syntax in FOR-Schleife

Frage Entwicklung Batch & Shell

Mitglied: Markx

Markx (Level 1) - Jetzt verbinden

17.07.2007, aktualisiert 18.07.2007, 3346 Aufrufe, 10 Kommentare

Ich komme mit einer (sicher "einfachen") Problematik nicht weiter.. Situation:

01.
SET Pfad=C:\temp\  
02.
SET Files=CW009 CW010 CW019 CW020 CW503 
03.
FOR %%a IN (%Files%) DO ( 
04.
FOR /F %%b IN (%Pfad%%%a.txt) DO ( 
05.
SET %%a=%%b ) 
06.
ECHO %%a)
Info: Die txt-Dateien enthalten mehrere Zeilen (jeweils eine Auflistung von Dateinamen) von denen ich den untersten Eintrag weiterverarbeiten muss (hier als Beispiel mit "ECHO"). Mein Problem ist, dass ich es nicht hinbekommen, den Inhalt der Laufvariable %%a ausgegeben zu bekommen. Nach meinem Verständnis sollte es mit "ECHO %%%a%" gehen, aber leider ist dem nicht so.

Kann mir einer auf die Sprünge helfen? Danke und Gruß vorab!
Mitglied: bastla
17.07.2007 um 16:25 Uhr
Hallo Markx!

Versuch es so:
01.
setlocal & enabledelayedexpansion 
02.
SET Pfad=C:\temp\  
03.
SET Files=CW009 CW010 CW019 CW020 CW503 
04.
FOR %%a IN (%Files%) DO ( 
05.
    FOR /F %%b IN (%Pfad%%%a.txt) DO ( 
06.
        SET Untester=%%b 
07.
08.
    ECHO !Untester! 
09.
)
Wenn sich innerhalb einer "for"-Schleife der Wert einer Variablen ändert, musst Du die "verzögerte Variablenauflösung" (= delayedexpansion) verwenden, da ansonsten immer nur der Wert zu Beginn der Schleife ermittelt und in der Schleife verwendet wird. Als Folge davon ändert sich die Variablenschreibweise (der betreffenden Variable) von %Variable% auf !Variable!.

Die Zuweisung SET %%a=%%b ist nicht nur syntaktisch falsch, sondern auch nicht sinnvoll - %%a erhält seine Werte ja aus der "for"-Schleife und sollte daher innerhalb der Schleife nicht geändert werden.

Grüße
bastla
Bitte warten ..
Mitglied: Markx
17.07.2007 um 16:44 Uhr
Hallo bastla,

danke für die schnelle Antwort, ich werde das testen..

Zu deinem Hinweis: ich ändere doch die Variable %%a mit der Anweisung "SET %%a=%%b" nicht ab, sondern erstelle eine Variable deren Name gleich dem aktuellen Wert von %%b ist.

Die Variablen "CW009" "CW010" "CW019" "CW020" "CW503" haben auch ihren richtigen (sprich erwarteten Inhalt).
Bitte warten ..
Mitglied: Markx
17.07.2007 um 16:55 Uhr
Nachtrag: leider funktioniert dies nicht.. es wird auf der Shell direkt !Untester! ausgegeben
Bitte warten ..
Mitglied: bastla
17.07.2007 um 17:07 Uhr
Hallo Markx!

Das sollte auch eine Batch-Datei sein (zumindest hatte ich es aufgrund des Variablennamens %%b angenommen), also bitte als solche testen.
Zum Variablennamen %%a: Auch wenn damit nicht die Zählvariable %%a gemeint war, ist es zwar möglich, eine solche Variable zu erstellen, aber verwenden wirst Du sie auch nur mit "delayedexpansion" können, also (in einem Batch) etwa:
01.
setlocal enabledelayedexpansion 
02.
set %%a=Test 
03.
echo !%%a!
Welchen besonderen Zweck sollten denn die beiden Prozentzeichen erfüllen?

Grüße
bastla
Bitte warten ..
Mitglied: bastla
17.07.2007 um 17:23 Uhr
Hallo Markx!

Sorry, dass das nicht so klappt, wie's eigentlich sollte. Bis mir etwas Besseres einfällt, versuch es damit:
01.
@echo off & setlocal 
02.
SET "Pfad=C:\temp\" 
03.
SET Files=CW009 CW010 CW019 CW020 CW503 
04.
FOR %%a IN (%Files%) DO call :ProcessFile "%Pfad%%%a.txt" 
05.
goto :eof 
06.
:ProcessFile 
07.
FOR /F "usebackq" %%b IN (%1) DO SET Untester=%%b 
08.
ECHO %Untester% 
09.
goto :eof
Grüße
bastla
Bitte warten ..
Mitglied: Markx
17.07.2007 um 17:34 Uhr
[edit] Bezug auf dein vorheriges Posting[/edit]

Ok, es ist eine Batchdatei, habe es ungünstig ausgedrückt: ich meinete die ausgabe wenn die Batchdatei ausgeführt wird.

Mit dem "SET %%a=%%b" hast du mich falsch verstanden! Ich will NICHT eine Variable mit dem Namen "%%a" anlegen, sondern eine Variable, deren Name gleich dem aktuellen Wert der Laufvariable %%a ist und setze den Wert der Variable gleich dem Wert der Laufvariable %%b.. Puh, so ist's korrekt.. Aber das ist auch nicht das Problem, es funktioniert ja!

Wie schon oben geschrieben, enthalten die angelegten Variablen ihren erwarteten Wert. Ich möchte nur ungern für alle 5 Variablen den selben "Verarbeitungscode" schreiben, sondern alles über eine weitere Schleife lösen. Mein Problem mal anderes formuliert:

"Welche Syntax ist notwendig, um in einer FOR-Schleife den Inhalt der Laufvariable (%%a) als Variablenname zu verwenden?"
Bitte warten ..
Mitglied: bastla
17.07.2007 um 17:36 Uhr
... Nachtrag: Auch mit dieser Version sollte es gehen (Problem dürfte die Leerstelle nach "C:\temp\" in meiner obigen Version gewesen sein):
01.
setlocal enabledelayedexpansion 
02.
SET "Pfad=C:\temp\" 
03.
SET Files=CW009 CW010 CW019 CW020 CW503 
04.
FOR %%a IN (%Files%) DO ( 
05.
	FOR /F %%b IN (%Pfad%%%a.txt) DO ( 
06.
	    SET Untester=%%b 
07.
08.
    ECHO !Untester! 
09.
)
Grüße
bastla
Bitte warten ..
Mitglied: bastla
17.07.2007 um 17:42 Uhr
Hallo Markx!

Da war ich leider etwas sehr daneben ...

Also dann:
01.
setlocal enabledelayedexpansion 
02.
SET "Pfad=C:\temp\" 
03.
SET Files=CW009 CW010 CW019 CW020 CW503 
04.
FOR %%a IN (%Files%) DO ( 
05.
    FOR /F %%b IN (%Pfad%%%a.txt) DO ( 
06.
        SET %%a=%%b 
07.
08.
    ECHO !%%a! 
09.
)
Grüße
bastla
Bitte warten ..
Mitglied: Biber
17.07.2007 um 22:50 Uhr
Moin Markx,

zugegeben, ich bin auch etwas verwirrt über das Ziel, das Du anstrebst.
Deshalb meine Nachfrage: Ist das Ziel
  • für die Textdatei-Namen CW009, CW010, ...CW503 zu prüfen, ob sie im Verzeichnis c:\temp existieren und falls ja, jeweils eine Umgebungsvariable der Art "CW009=c:\temp\CW009.txt" zu setzen??
  • in den Textdatei-Namen CW009, CW010, ...CW503, falls sie im Verzeichnis c:\temp existieren, die jeweils darin enthaltene(n) Zeile(n) zu lesen und das erste Token als eine Umgebungsvariable der Art "ErsteZeileInCW009=c:\temp\CW009.txt" zu setzen??

Das zweite würde zwar wenig Sinn machen, aber der Code deutet darauf hin.

Grüße
Biber
Bitte warten ..
Mitglied: Markx
18.07.2007 um 08:24 Uhr
Hallo Biber,

danke der Nachfrage! Also beide Vermutungen über "mein Ziel" sind nicht wirklich zutreffend. Ich habe beim Schreiben eines Scriptes das mir bei einer etwas konfuser Problematik (hat mit Quelldaten für ein Auswertungssystem zu tun; sehr wild und würde hier den Rahmen sprengen) helfen soll.

Ich habe nur nicht die komplette "Lebensgeschichte" hier aufgeschrieben Da ich nach meiner Einschätzung nur ein syntaktisches und kein strukturelles Problem habe. Daher habe ich nur einen Teil des Codes hier im Posting verwendet um meine Frage daran stellen zu können.

Ich habe es auch mit den Tipp's von Bastla nicht hinbekommen, leider.. Konnte aber für mein eigentliches Ziel einen anderen Ansatz finden, bei dessen Durchführung ich nicht mehr auf das hiesige Problem stosse. Mich würde es trotzdem noch interessieren, bin mir sich das kommt mal wieder (wie man so schön sagt).
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Batch Schleife als FOR-SCHLEIFE
gelöst Frage von mp2711Batch & Shell2 Kommentare

Mit den FOR-Schleifen habe ich mich leider bislang zu selten auseinander gesetzt, aber da ich sonst gerade nicht weiter ...

Batch & Shell
FOR Schleife mit LOOP und nachfolgender FOR Schleife
gelöst Frage von miczarBatch & Shell6 Kommentare

Hallo zusammen, ich habe ein Problem mit einem Batchfile. Situation: im Netzwerk ist kein WINS mehr vorhanden und so ...

Batch & Shell
FOR Schleife läuft nicht
gelöst Frage von sugramBatch & Shell4 Kommentare

Hallo Ich glaube ich sehe den Wald vor lauter Bäumen nicht. Aber ich bekomme die FOR Schleife nicht zum ...

Batch & Shell
For Schleife kaputt?
gelöst Frage von Peter32Batch & Shell5 Kommentare

Hallo, ich finde den Fehler nicht irgendwie bekomme ich ständig denselben Inhalt in "Name.txt" und kann dann nicht weiterarbeiten ...

Neue Wissensbeiträge
Viren und Trojaner

Deaktivierter Keylogger in HP Notebooks entdeckt

Information von bitcoin vor 2 StundenViren und Trojaner

Ein Grund mehr warum man Vorinstallationen der Hersteller immer blank bügeln sollte Der deaktivierte Keylogger findet sich im vorinstallierten ...

Router & Routing

Lets Encrypt kommt auf die FritzBox

Information von bitcoin vor 6 StundenRouter & Routing

In der neuesten Labor-Version der FB7490 integriert AVM unter anderem einen Let's Encrypt Client für Zugriffe auf das Webinterface ...

Internet

Was nützt HTTPS, wenn es auch von Phishing Web-Seiten genutzt wird

Information von Penny.Cilin vor 3 TagenInternet17 Kommentare

HTTPS richtig einschätzen Ob man eine Webseite via HTTPS aufruft, zeigt ein Schloss neben der Adresse im Webbrowser an. ...

Webbrowser

Bugfix für Firefox Quantum released - Installation erfolgt teilweise nicht automatisch!

Erfahrungsbericht von Volchy vor 4 TagenWebbrowser8 Kommentare

Hallo zusammen, gem. dem Artike von heise online wurde mit VersionFirefox 57.0.1 sicherheitsrelevante Bugs behoben. Entgegen der aktuellen Veröffentlichung ...

Heiß diskutierte Inhalte
Exchange Server
SBS 2011 E-Mails können gesendet werden, aber nicht von extern empfangen
Frage von andreas1234Exchange Server15 Kommentare

Hallo Community, ich habe das Problem, dass seit knapp zwei Wochen die E-Mails von meinem SBS 2011 einwandfrei gesendet ...

Voice over IP
Telefonstörung - Ortsrufnummern kein Verbindungsaufbau
Frage von Windows10GegnerVoice over IP10 Kommentare

Hallo, sowohl bei uns als auch beim Opa ist es über VoIP nicht möglich Ortsrufnummern anzurufen. Es kommt nach ...

Batch & Shell
Trusted Sites für alle User auf dem PC einpflegen
Frage von xXTaKuZaXxBatch & Shell10 Kommentare

Aufgabestellung: Es sollen auf 1 PC (bzw. mehreren PCs) vertrauenswürdige Sites per Powershell eingetragen werden, die für alle User ...

Windows Server
Administratoren-Gruppe abfragen?
Frage von 1410640014Windows Server6 Kommentare

Hallo, kennt jemand eine einfache (und schnelle) Möglichkeit, von allen Client-Computern im Active Directorey die Administratoren-Gruppe abzufragen, wer da ...