backspace
Goto Top

Forschleife (Batch) nur letzte Wert wird ausgegeben

Hallo,

for /f "tokens=1,5" %%a in (Pfad1................................) do (  

for /f "tokens=7" %%b in (Pfad2..........................) do set FREE=%%b  

wget "http:......"   )  

Zeile 3 (die zweite verschachtelte Forschleife) aus obigem Code:

es wird jeweils nur der letzte Wert ausgegeben, alle anderen Werte werden durch den letzten überschrieben.


Danke


Gruß

Backspace

Content-Key: 157311

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

Printed on: April 25, 2024 at 14:04 o'clock

Mitglied: 60730
60730 Dec 20, 2010 at 15:50:38 (UTC)
Goto Top
moin,

  • wenn du eine Schleife mit "tokens=1,5" baust - und als Laufvariable %a nimmst - was genau passiert denn da?
- genau der erste Wert ist %a und der zweite, der an 5. Stelle liegt %b

  • Von daher kannst du keine doppelte Schleife dranhängen und da auch %b benutzen.

Btw:
  • Das ist jetzt der zweite Anlauf mit deinem "psinfo" & Wget - läßt du uns andere auch mal dran teilhaben, was das ganze werden wird?
Denn mit Verlaub - da einen "Sinn" dahinter zu sehen, dass kann keiner - also wirds mit dem helfen auch schwer.
  • do set FREE=%%b - weißt du aber schon, dass das "so" nur einmal geht - schau dir mal die Anleitung zu den Schleifchen an - da hat sich einer Mühe gegeben face-wink

  • Vergleiche evtl. auch mal die Länge und den Informationsinhalt deiner Frage, die eigentlich nur Hallo und 2 zeilen um einen 3 zeiligen zerschnippselten Schnippsel ist und meine- Antwort.... face-sad

Gruß
Member: Backspace
Backspace Dec 20, 2010 at 16:43:34 (UTC)
Goto Top
Hallo,

das mit dem Kurz und Knapp war eigentlich gut gemeint, damit nicht allzuviel zum lesen da steht.

Es geht hier um eine Projektarbeit, die freien Speicher ausliest (heterogene Systeme), bei zuwenig Speicher eine Warnung per Mail versendet etc..
Es werden dabei zum Teil wieder neue Vorgaben gemacht, die ich dann entsprechend umsetzen muß, wie auch z.B. die Integration von Sicherheitsfunktionen etc..


Der Code, den ich oben geschrieben habe, ist mehr allgemein gehalten, insbesondere was die Vergabe der Variablen angeht, im Originalcode bei mir habe ich nicht %%a, %%b gewählt, sondern sehr weit auseinanderliegende Buchstaben, hab jetzt beim Schreiben des Codes hier im Forum leider nicht aufgepasst als ich %%a, %%b reinschrieb, Sorry !

Ich soll das Problem mit dem Überschreiben der Werte lösen, ohne die Verwendung einer Textdatei als Zwischenspeicher für die Werte, daher der Versuch mit den verschachtelten Forschleifen.

Hatte die Schleifen zuerst einzeln, leider mit dem gleichen Ergebnis, dass immer eine von beiden (nämlich die, die nicht am wget hing), die Werte überschrieb.

Gruß

Backspace
Mitglied: 60730
60730 Dec 20, 2010 at 16:54:48 (UTC)
Goto Top
Zitat von @Backspace:
Hallo,

das mit dem Kurz und Knapp war eigentlich gut gemeint, damit nicht allzuviel zum lesen da steht.
Wir suchen uns schon das raus, was wir brauchen und den Rest können wir ignorieren - ist in meinen Augen sinniger, als sich nen Kopf drüber zu machen, was und wieso ...

Es geht hier um eine Projektarbeit, die freien Speicher ausliest (heterogene Systeme), bei zuwenig Speicher eine Warnung per Mail versendet etc..

  • puh, also für sowas gibts doch Tools en Masse - sogar freie und nix gegen Mark und Bryce Werkzeuge, aber zum freien Platz auslesen - nehm ich doch kein Psinfo - sondern ein Dir...for /f "tokens=3 delims=, " %a in ('dir, c:\') do set free=%a

Der Code, den ich oben geschrieben habe, ist mehr allgemein gehalten, insbesondere was die Vergabe der Variablen angeht, im
Originalcode bei mir habe ich nicht %%a, %%b gewählt, sondern sehr weit auseinanderliegende Buchstaben, hab jetzt beim
Schreiben des Codes hier im Forum leider nicht aufgepasst als ich %%a, %%b reinschrieb, Sorry !

  • grrr - also wenn ich - falls ich tatsächlich mal ne Frage hätte - ich würde die betreffenden Zeilen fürs Forum ganz sicher nicht neu erfinden - sondern den Zustand weitergeben, an dem ich hängengeblieben bin. face-sad

Ich soll das Problem mit dem Überschreiben der Werte lösen, ohne die Verwendung einer Textdatei als Zwischenspeicher
für die Werte, daher der Versuch mit den verschachtelten Forschleifen.
Ok nochmal langsam .... du hast da einen dreizeiligen Schnippsel, den so keiner nachvollziehen kann - wer 1,5 und wer 7 ist etc.

Hatte die Schleifen zuerst einzeln, leider mit dem gleichen Ergebnis, dass immer eine von beiden (nämlich die, die nicht am
wget hing), die Werte überschrieb.
Du hast dir aber schon die Mühe gemacht, mal nach einer Anleitung zu suchen, die sich um das Thema For Schleifen in Bädsches kümmert?

Gruß
Member: Backspace
Backspace Dec 20, 2010 at 19:39:15 (UTC)
Goto Top
Ja, ich hab mir die Mühe gemacht.


Nichts für Ungut.
Member: Biber
Biber Dec 20, 2010 at 20:08:20 (UTC)
Goto Top
Moin Backstube,

zu den Fähigkeiten, die wir uns im IT-Zeitalter notgedrungen aneignen müssen, wenn wir nicht wie ein Sarrazin enden wollen gehört auf jeden Fall das Filtern und Bewerten von Daten und im zweiten Step das Destillieren von Informationen aus Daten.
Und nach jahrelanger Übung vielleicht und hoffentlich sogar das Destillieren von Wissen aus Informationen.

Bitte versuch auch du, die Kommentare von T-Mo auf verwertbare und vielleicht auch wertvolle Informationen zu scannen und nicht nur auf die T-Mo-typischen freundschaftlich-ruppigen Rüffel anzuspringen.

Wo T-Mo sicherlich recht hat - die Darreichungsform deiner Frage ist ... na ja-wirf selber noch mal einen unvoreingenommen Blick darauf bitte.

Die darauf bezogenen Anmerkungen sind angebracht, aber insgesamt nicht zielführend.

Vielleicht solltest du eher noch mal seine Anregung prüfen, ob nicht für deinen Zweck ein real existierendes Umsonst-und-draußen-One-Trick-Tool sinnvoller wäre.
Immerhin versuchst du schon seit zwei Wochen - wie es vor dir bestenfalls McGuywer geschafft hat - aus Kronenkorken und zwei alten Miesmuscheln irgendetwas von Win95 bis Win8 Beta universal Einsetzbares zu basteln...

Wenn das 14 Tage braucht, dann deutet es doch darauf hin, dass
  • du entweder absolut keinen Draht zum Skripten hast, dafür aber vielleicht supergut Xylophon spielst oder Cartoons zeichnen kannst
  • oder aber, dass dir die Grundlagen zum Handhaben der Werkzeuge fehlen oder das Ziel zu hoch gesteckt (worden) ist
  • oder aber, und vor allem das solltest du prüfen, ob es vielleicht das falsche Werkzeug ist.

Das zeugt doch nicht von Eleganz und handwerklicher Begabung, wenn du deinem Ausbilder beweist, dass du irgendwelche Dübel auch mit dem Vorschlaghammer in die Wand bekommst oder Nägel mit der Schlagbohrmaschine.

Wenn die Anforderungen und Voraussetzungen so weit auseinanderlaufen wie in deinen letzten Posts geschildert,
dann ist es eben nicht das richtige Werkzeug (i.e. PsTools & FOR/F-Anweisungen) für deinen Zweck.

Deshalb beiss dich da nicht trotzig fest an diesem (sehr guten) FOR-Tutorial - sortier doch erstmal, was das Ziel (und was davon Pflicht und was Kür) ist.
Und prüfe dann, welches Tool dich dem Ziel näher bringt.

Grüße
Biber
Member: jeb-the-batcher
jeb-the-batcher Dec 21, 2010 at 07:54:40 (UTC)
Goto Top
Zitat von @60730:
  • wenn du eine Schleife mit "tokens=1,5" baust - und als Laufvariable %a nimmst - was genau passiert denn da?
- genau der erste Wert ist %a und der zweite, der an 5. Stelle liegt %b

  • Von daher kannst du keine doppelte Schleife dranhängen und da auch %b benutzen.

Ja gut erkannt, aber trotzdem falsch. face-smile

Gut zu sehen an einem einfachen Beispiel
@echo ON
for /F "tokens=1,2" %%a IN ("111 222") DO (  
   FOR %%b IN ("333") DO (  
      echo %%~a %%~b
   )
)

Obwohl jetzt durch durch die äußere FOR-Loop tatsächlich in der inneren LOOP echo %%a %%b durch echo 111 222 ersetzt werden,
schafft es cmd.exe danach sich nochmal um zu entscheiden und dann doch lieber echo 111 333 am Ende zu verwenden.

Zu beachten ist auch, das cmd.exe das %%b in FOR %%b ... nicht ersetzt, als wenn klar wäre, dass das nicht so sinnvoll ist.
Sprich in der Inneren Loop kann man nicht an das %%b der äußeren Loop heran kommen.
Die Abarbeitung von FOR-LOOPs scheint sich intern bereits beim ersten Parsen, die Stellen zu merken an denen später ersetzt wird.

Grüße
jeb