Zum Inhalt springen

Programmierer - Dos Hilfe für Befehl For


 Teilen

Empfohlene Beiträge

Hallo Leute,

 

ich such mal ganz geschwind wen der sich ein Bisschen (hoffentlich mehr als ich) mit programmieren auskennt.

 

Folgendes Problem:

 

Ich möchte über ein Cmd-Script diverse Programme installieren, zwischedurch muss der Server ein paarmal neu starten und das Script wieder aufgreifen und fortfahren.

 

jetzt bin ich auf das gestoßen:

 

FOR /F "tokens=2* delims= " %%A IN ('REG QUERY "HKLM\Software\Test" /v Hardware') DO SET Hardware=%%B

 

Super sexy :) über REG QUERY kann ich den Registrykey auslesen, über do set kann ich eine Umgebungsvariable definieren welche ich dann in dem Script wieder aufgreifen kann und mittels eines Goto in die entsprechende Zeile hüpfen kann.

 

Bloß, was sagt der Parameter "tokens" und "delims" aus?

 

Wenn ich den Befehl auf einem PC ausführe bekomme ich eine Fehlermeldung: %%A ist syntaktisch an dieser Stelle nicht verarbeitbar.

 

Ich bekomme den selben Fehler wenn ich das aufrufe:

for /f "tokens=1-5 delims=/ " %%d in ("%date%") do rename "hope.txt" %%e-%%f-%%g.txt

 

Aus der Dos Hilfe werde ich nicht wirklich schlau :(

 

Kann mir da bitte, bitte wer helfen, wäre euch sehr dankbar :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

aus dem "Hilfe- und Supportcenter"

 

delims=xxx Gibt einen Trennzeichensatz an. Dieser ersetzt den Standard-Trennzeichensatz aus Leerzeichen und Tabulator.

 

tokens=x,y,m-n Gibt an, welche Tokens aus jeder Zeile bei jeder Iteration an den Rumpf der for-Anweisung übergeben werden. Als Ergebnis davon werden zusätzliche Variablennamen zugewiesen. Die Form m-n gibt den Bereich vom m-ten bis zum n-ten Token an. Wenn das letzte Zeichen in der Zeichenfolge tokens= ein Sternchen (*) ist, wird eine weitere Variable zugewiesen, die den übrigen Text der Zeile nach dem zuletzt geparsten Token empfängt.

 

habs noch nie gebraucht.. weiß auch (noch) nicht inwieferns relevant für dich is oder was du eingeben "musst"

 

hier is etwas anschaulicher am beispiel eines ping outputs

http://www.robvanderwoude.com/ntfortokens.html

Link zu diesem Kommentar
Auf anderen Seiten teilen

Thx für die Antwort, das habe ich alles schon durch, wenn mir das bloß wer eindeutschen könnte...

 

Das spuckt nämlich auch die Dos Hilfe aus.

 

Zu Delims kann ich mir ja noch was vorstellen drunnter, aber wo kommt da

 

for /f "tokens=1-5 delims=/ " %%d in ("%date%") do rename "hope.txt" %%e-%%f-%%g.txt

 

ein "/" vor -> Soll ja ein Trennzeichen sein wenn ich es richtig verstehe

 

Aber zu Tokens, da versteh ich nichtmal die Hilfe :mad:

 

Evtl. bin ich ja auf dem falschen Dampfer unterwegs, ich könnte auch ein Lofile auslesen bei dem ich immer die letzte Zeile übergebe. Weiß wer wie das funktionieren könnte?

 

Ach ja, den Link kannte ich schon ;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

delims überschreibt den normalen dos delimiter space oder tab.

tokens gibts an welche teile er pro zeile nehmen soll die durch den delimitier getrennt sind verarbeiten soll

 

wenn du einen for befehl über die cmd zeile ausführst nimm die doppelten % weg das ist nur in skripts von nöten.

 

richtig wäre für die date funktion auf deutschen rechnern (wo das datum durch "." getrennt ist) =>

 

for /f "tokens=1-3 delims=. " %d in ("%date%") do rename "hope.txt" %d-%e-%f.txt

 

ich hoffe es ist damit etwas klarer

 

ich bin leider nicht besonders gut darin anderen dinge zu erklären, aber spiel dich mit der zeile die ich gepostet hab und verändere die tokens dann wirds automatisch klar :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

 

wenn du einen for befehl über die cmd zeile ausführst nimm die doppelten % weg das ist nur in skripts von nöten.

 

 

ich hoffe es ist damit etwas klarer

 

:love: :bounce::jump:

 

Das hats gebraucht ;)

 

Nochmal zum eigentlichen Befehl den ich wissen wollte:

 

FOR /F "tokens=2* delims= " %%A IN ('REG QUERY "HKLM\Software\Test" /v Hardware') DO SET Hardware=%%B

 

was tut das tokens=2 jetzt genau? "delims= " sagt aus dass es nichts trennen soll? Außer das Standardtrennzeichen, Space und Tab? Kann ich es also weglassen?

 

Für was ist das %%A?

 

Der Rest sollte mir soweit klar sein.

 

Ich will es wie oben schon geschrieben scripten, brauche ich dann das "%%" wieder - warum?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Nimmt die zweite Folge (token) einer Zeichenkette. Habe ich also ein Input ("Satz") und das Trennzeichen sind Leerzeichen, dann gibt Tokens=2 das zweite Wort aus.

 

Kannst du mir das an dem Beispiel oben erklären?

 

Ach ja, wenn ich jetzt die Befehlskette von oben ohne %% eingebe (sondern nur mit einem %) dann bekomme ich als Ausgabe

SET Hardware=%VERSION 3.0

 

Das passt jetzt aber nicht ganz, da steht nämlich was anderes in dem Key drinnen :f:

Link zu diesem Kommentar
Auf anderen Seiten teilen

http://www.robvanderwoude.com/ntregistry.html

 

das ist die wohl beste erklärung für das auslesen von einem Registrierungsschlüssel und das setzten einer umgebungsvariable.

 

mach mal REG QUERY "HKLM\Software\Test" /v Hardware und schau dir an was zurückkommt.

 

Tokens=2 nimmt das 2. wort

Tokens=2* nimmt alles nach dem 2.

 

Wenn du mir sagst was bei der REG QUERY zurückkommt kann ich dir besser helfen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Da liegt auch das problem.

 

Du kriegst vom REG QUERY ....... den string

 

! REG.EXE VERSION 3.0

 

HKEY_LOCAL_MACHINE\Software\Test\

Hardware REG_SZ test

zurück. du willst aber nur Hardware REG_SZ test

 

Wenn du den string jetzt mit den tokens im for befehl verarbeitest ist tokens = 2* ==VERSION 3.0

 

sprich du musst die rot geschriebene ausgabe vom reg query irgendwie unterdrücken, ich hab aber keinen plan wie das geht. ich find auf die schnelle nichts im netz und muss noch weiterarbeiten ;) aber ich schau mal wenn ich zuhause bin.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

 Teilen

×
×
  • Neu erstellen...