Zum Inhalt wechseln


Foto

Batch Variable aus Registrierung mit Leerzeichen


  • Bitte melde dich an um zu Antworten
31 Antworten in diesem Thema

#1 Ody

Ody

    Newbie

  • 16 Beiträge

 

Geschrieben 04. März 2016 - 15:03

Hallo zusammen,

 

ich hab wieder ein kleines Problem wo ich nicht weiterkomme.
Ich möchte einen Wert aus der Windows Registrierung auslesen und in eine Variable schreiben.
Soweit kein Problem Code:

for /f "tokens=3 skip=2" %%i in ('reg query "%REG%" /v Pfad') do set VAR=%%i

%REG% ist der Schlüssel der vorher definiert wurde mit "Pfad" wird die Zeichenfolge ausgewertet und in die Variable VAR geschrieben.

 

Jetzt zu meinen Problem:

Die Variable hat Leereichen was dafür sorgt das beim ersten Leerzeichen Schluss ist.
Wert: C:\Program Files (x86)\Programm

Wert in der Variable C:\Program

ohne Leerzeichen Funktioniert es Problemlos.

 

muss ich mit delims was definieren? Hab mehrere varianten versucht ohne das Ziel zu erreichen.

 

Vielen Dank im voraus
Ody
 


 



#2 Nobbyaushb

Nobbyaushb

    Board Veteran

  • 2.629 Beiträge

 

Geschrieben 04. März 2016 - 15:45

Meistens hilft es Hochkomma zu verwenden, je nach Sprache " oder ´

 

;)


Mfg aus Bremen

 

Norbert (der andere :))

MVP Exchange Server


#3 Ody

Ody

    Newbie

  • 16 Beiträge

 

Geschrieben 04. März 2016 - 16:11

Hallo Nobbyaushb,

 

das hab ich auch in allen möglichen Varianten versucht aber nachdem der Wert direkt
In der for Schleife ausgelesen und in die Variable geschrieben wird hab ich da ja nicht viel Möglichkeiten?

Hab sogar mit usebackq ein bisschen rumgespielt.

Grüße
Ody
 


Hi lefg,

 

ich glaub nicht das ich damit ans Ziel komme, ich will den Pfad ja mit Leerzeichen weil er später verwendet wird

um z.B. Dateien zu lesen oder exen zu öffnen. Ich muss aber auch gestehen das ich mit der Beschreibung von %PATH:str1=str2% nicht 

ganz klar kommen.

LG
Ody
 



#4 lefg

lefg

    Expert Member

  • 20.479 Beiträge

 

Geschrieben 04. März 2016 - 16:23

Hi Ody,

 

ich hab meinen Post gelöscht, da er wohl nicht dein Problem trifft. Du willst ja kein Leerzeichen aus einer Variablen entfernen.

 

Falls ich es richtig verstanden, wird wegen des Leerzeichen im Registryeintrag beim Auslesen das Token verkürzt, beendet beim Leerzeichen? Oder? Das Leerzeichen ist dann Delimeter. Wie das Leerzeichen als Delimeter inaktivieren? Ich weiss es nicht mehr.

 

Wie mir scheint, liest Du jetzt nur das Token 3 aus. Wie wäre es, Token 3+4 auszulesen?


Bearbeitet von lefg, 04. März 2016 - 16:30.

Das Messbare messen, das Nichtmessbare messbar machen. Galilei.

 

Diskutiere nicht mit ***en, denn sie ziehen dich auf ihr Niveau und schlagen dich dort mit Erfahrung! (Hab ich bei Tom abgeguckt)

 

Koinzidenz begründet keine Korrelation und ist kein Beweis für Kausalität. (Hab ich bei Daniel abgeguckt) https://de.wikipedia...rgo_propter_hoc

 

Absolutistischer“ Geschäftsführungs-Dogmatismus, der jedwede Empirie aus der „Werkstatt“ schlichtweg ignoriert , führt eben zumeist früher als später ….  (Hab ich von Klabautermann)


#5 Ody

Ody

    Newbie

  • 16 Beiträge

 

Geschrieben 04. März 2016 - 16:25

ja genau er gib nur alles bis zum ersten Leerzeichen aus



#6 lefg

lefg

    Expert Member

  • 20.479 Beiträge

 

Geschrieben 04. März 2016 - 16:36

Das Token 3 ist damit beim Leerzeichen zu Ende, danach beginnt das Token 4. Du musst alsi schauen, wie werden beide Token ausgelesen? Das ergibt sich aus der Beschreibung und ist auch im Web vielfach an Beispielen aufgeführt.

 

 

 

FOR /F  ["<optionen>"] %%<variable> IN ('<befehl1>') DO <befehl2>
       Ergebnis von <befehl1> ergibt Wertevorrat für %%<variable>

 

<variable>: ein Buchstabe (Groß- und Kleinschreibung wird unterschieden)
<befehl>:    auch Zusammenfassung mit ( ... & ...) oder ... && ... oder ...|| ... erlaubt
<wertevorrat>:  mögliche Werte; durch Leerzeichen, , oder ; getrennt
<optionen>:

eol=c                       c  Zeilen, die mit <c> beginnen, werden übergangen
skip=n                     n Zeilen werden am Dateianfang übersprungen
delims=x..               x Trennzeichen ersetzen Standard (Leerzeichen und Tab)
tokens=[x,..[,m-n][,*]]  gibt an, welche Token jeder Zeile ausgewertet werden: x-ter; m bis n-ter
*: restliche Zeile wird zugeordnet
wird mehr als 1 Token angegeben, werden dafür weitere Variablen definiert (alphabetisch aufsteigend nach <variable>; beachten, daß z nicht überschritten wird!)

Bearbeitet von lefg, 04. März 2016 - 16:42.

Das Messbare messen, das Nichtmessbare messbar machen. Galilei.

 

Diskutiere nicht mit ***en, denn sie ziehen dich auf ihr Niveau und schlagen dich dort mit Erfahrung! (Hab ich bei Tom abgeguckt)

 

Koinzidenz begründet keine Korrelation und ist kein Beweis für Kausalität. (Hab ich bei Daniel abgeguckt) https://de.wikipedia...rgo_propter_hoc

 

Absolutistischer“ Geschäftsführungs-Dogmatismus, der jedwede Empirie aus der „Werkstatt“ schlichtweg ignoriert , führt eben zumeist früher als später ….  (Hab ich von Klabautermann)


#7 blub

blub

    Moderator

  • 7.605 Beiträge

 

Geschrieben 04. März 2016 - 16:53

versuch mal 3-fache Anführungszeichen am Anfang und Ende der Variable:

('reg query """%REG%""" /v Pfad')


Ein Kluger bemerkt alles, Ein Dummer macht über alles eine Bemerkung. (Heinrich Heine)


#8 lefg

lefg

    Expert Member

  • 20.479 Beiträge

 

Geschrieben 04. März 2016 - 17:02

Ob delims=° oder etwas Ähnliches schon reicht, das Leerzeichen und den Tabulator als Delimeter unwirksam zu machen?

 

Oder Tokens=3,* zum Lesen ab Token 3 bis EOL?


Bearbeitet von lefg, 04. März 2016 - 17:06.

Das Messbare messen, das Nichtmessbare messbar machen. Galilei.

 

Diskutiere nicht mit ***en, denn sie ziehen dich auf ihr Niveau und schlagen dich dort mit Erfahrung! (Hab ich bei Tom abgeguckt)

 

Koinzidenz begründet keine Korrelation und ist kein Beweis für Kausalität. (Hab ich bei Daniel abgeguckt) https://de.wikipedia...rgo_propter_hoc

 

Absolutistischer“ Geschäftsführungs-Dogmatismus, der jedwede Empirie aus der „Werkstatt“ schlichtweg ignoriert , führt eben zumeist früher als später ….  (Hab ich von Klabautermann)


#9 zahni

zahni

    Expert Member

  • 16.389 Beiträge

 

Geschrieben 04. März 2016 - 18:24

Hallo Ody,

 

nix für ungut, möchtest Du nicht doch mal bei Powershell vorbeischauen? Für den Anfang kann man sich auch was "zusammen googeln".


Wen du nicht mit Können beeindrucken kannst, den verwirre mit Schwachsinn!


#10 Ody

Ody

    Newbie

  • 16 Beiträge

 

Geschrieben 04. März 2016 - 20:43

Guten Abend zusammen,

 

erst mal vielen Dank für eure Rückmeldung und Bemühungen!

 

@lefg

Ich hab natürlich vor dem Post schon versucht eine Lösung zu finden, bin auch auf zwei Einträge gestoßen wo es
um Werte aus Registrierung auslesen usw. geht bei einem wurde dann genau die Frage gestellt (von einem anderen User)
und die Antworten blieben aus :-)

 

Das mit den Tokens ist ein Ansatz, aber was bringt es mir einen Wert auszulesen wenn ich wissen muss wie viele Leerzeichen er enthält

dann doch lieber gleich im Batchfile mit set fixen und Standards definieren. Aber Flexibel wäre doch einfach zu schön :-)

ich suche auf jeden Fall weiter.

 

Deine Idee mit delims=°, Tokens=3,* (Da hatte ich kurz Hoffnung) hat leider nicht funktioniert

 

@blub

hab ich versucht:

FEHLER: Der angegebene Registrierungsschlüssel bzw. Wert wurde nicht gefunden.

 

@zahni
mist er hat mich entdeckt :-)

Du wirst lachen, aber ich hab mir sogar Tutorials angeschaut und werde mich da nach und nach rantasten

aber Veränderung dauert bekanntlich seine Zeit und Lösungen wollen meistens gestern schon durch die Tür.
Aber ich hab es mir zu Herzen genommen, wie gesagt bin kein scripter und daher nur sehr langsam bei sowas. Danke!

Euch allen jetzt erst mal ein schönes Wochenende!
 

 

 


@lefg

Nachdem man nur mit testen lernen und wieder testen sein Wissen erweitern kann, hab ich mir deine Token Idee angeschaut:

for /f "tokens=3,4,5 skip=2 delims= " %a in ('reg query "%REG%" /v Pfad') do set var1=%a&set var2=%b&set var3=%c
set var=%var1% %var2% %var3%
echo %var%

In meinem Beispiel sind es 3 weitere Tokens

Nummer 3=C:\Program

Nummer 4=Files

Nummer 5=(x86)\Programm\

 

nachdem mit delims das Leerzeichen als Trennzeichen gesetzt ist, alle zusammen in eine neue Variable Schreiben und dort die Leerzeichen wieder setzten.

 

Resultat von %var%:

C:\Program Files (x86)\Programm\

 

:-)

Aber wie gesagt Flexibel wäre schön, da ich nicht weiß wie viele Leerzeichen im Pfad in der Registrierung stehen.
Ich suche weiter und bin nach wie vor für Denkanstöße dankbar
 


 



#11 lefg

lefg

    Expert Member

  • 20.479 Beiträge

 

Geschrieben 05. März 2016 - 08:21

Welchen Pfad/Key willst Du denn lesen?


Das Messbare messen, das Nichtmessbare messbar machen. Galilei.

 

Diskutiere nicht mit ***en, denn sie ziehen dich auf ihr Niveau und schlagen dich dort mit Erfahrung! (Hab ich bei Tom abgeguckt)

 

Koinzidenz begründet keine Korrelation und ist kein Beweis für Kausalität. (Hab ich bei Daniel abgeguckt) https://de.wikipedia...rgo_propter_hoc

 

Absolutistischer“ Geschäftsführungs-Dogmatismus, der jedwede Empirie aus der „Werkstatt“ schlichtweg ignoriert , führt eben zumeist früher als später ….  (Hab ich von Klabautermann)


#12 Sunny61

Sunny61

    Expert Member

  • 22.100 Beiträge

 

Geschrieben 05. März 2016 - 13:28

Schau dir dieses Beispiel an:

IF "%ProgramFiles(x86)%" == "" GOTO NOPATH
   :YESPATH
   @ECHO The PATH environment variable was detected.
   PATH=%ProgramFiles(x86)%
   pause
   GOTO END
   :NOPATH
   @ECHO The PATH environment variable was NOT detected.
   PATH=C:\DOS;
   GOTO END
   :END

Wenn Du das in ein Batch bringst und die Batch per Doppelklick startest, was wird dir angezeigt?

 

EDIT: Hier ist das Original: https://support.micr...de-de/kb/121170

 

Das was Du vermutlich suchst sind die sog. Umgebungsvariablen.

http://www.winfaq.de...p?h=tip0328.htm

http://www.windows7-...indows-7-liste/

 

Wie arbeite ich in Batchdateien mit Variablen: https://www.administ...gen-117069.html

https://de.wikipedia...gebungsvariable


Bearbeitet von Sunny61, 05. März 2016 - 13:30.

Gruppenrichtlinien: http://www.gruppenrichtlinien.de/

#13 daabm

daabm

    Expert Member

  • 2.106 Beiträge

 

Geschrieben 05. März 2016 - 15:46

Hm - da fällt mir spontan SETX ein - kann mit /K den Inhalt von Registrierungswerten in Umgebungsvariablen schreiben smile.gif
Sunny, wenn das in einem Deiner unzähligen Links schon beschrieben ist, hab ich nix gesagt...

Greetings/Grüße, Martin

Mal ein gutes Buch über GPOs lesen? Oder ein kleines, aber feines Blog darüber?

Und wenn mir die IT mal auf die Nerven geht - coke bottle design refreshment (-:


#14 Sunny61

Sunny61

    Expert Member

  • 22.100 Beiträge

 

Geschrieben 05. März 2016 - 16:27

Hm - da fällt mir spontan SETX ein - kann mit /K den Inhalt von Registrierungswerten in Umgebungsvariablen schreiben smile.gif
Sunny, wenn das in einem Deiner unzähligen Links schon beschrieben ist, hab ich nix gesagt...


Nein, das steht da nicht drin. Für mich sieht das allerdings so aus, als ob er TO etwas auslesen möchte das schon als Umgebungsvariable vorhanden ist. Deshalb der Hinweis.
Gruppenrichtlinien: http://www.gruppenrichtlinien.de/

#15 massaraksch

massaraksch

    Newbie

  • 152 Beiträge

 

Geschrieben 06. März 2016 - 20:25

Hi,

 

Batch und FOR-Gefrickel ist ja sowas von Gestern... ;)

for /f "tokens=3*" %%i in ('reg query "%REG%" /v Pfad') do set VAR=%%i%%j

Was soll eigentlich das seltsame skip=2?

 


mfg, massaraksch