Ody
-
Gesamte Inhalte
16 -
Registriert seit
-
Letzter Besuch
Beiträge erstellt von Ody
-
-
Es für jemanden der nicht so viel Ahnung hat wie du nicht immer einfach das wesentliche herauszufiltern, aber dafür gibt es ja solche Foren
und nette Menschen wie dich die versuchen die richtigen Anstöße zu geben, nochmals Danke an dieser Stelle.p.s. Suchen bevor man postet sollte natürlich immer die erste Wahl sein, was ich auch gemacht hatte
-
Ja lefg du hast ja sowas von recht zu dem Zeitpunkt war mir aber das zuweisen der automatischen Folgevariablen noch nicht ganz klar, daher hat
es bei meinen Tests auch nie funktioniert :-/
-
Hallo zusammen,
Dank lefg und massaraksch ist mir der Fehler in meinem Post aufgefallen und hab ihn deshalb entfernt
um andere nicht zu verwirren. Siehe Post 32 mit der Lösung
-
Hallo und willkommen,
ich hatte ein ähnliches Problem, wenn dein Pfad fix ist hast du hier ein Beispiel wie man es auslesen
und als Variable definieren kann. Mein Problem war das ich flexibel auf Leerzeichen eingehen wollte was
mit Batch nur mehr als umständlich oder gar nicht geht:
http://www.mcseboard.de/topic/206525-batch-variable-aus-registrierung-mit-leerzeichen/?p=1296103
weiter Vorschläge waren den Wert als Systemvariable zu setzten oder es über PowerShell zu lösen.
Vielleicht hilft dir das weiter, viel Erfolg!Grüße
Ody
-
Hallo zusammen,
dann tut es mir leid wenn ich euch damit aufgehalten habe!
Ich werde es vorerst mit Standards umgehen und mir zahnis Vorschlag zu Herzen nehmen.
Es war für mich trotzdem sehr aufschlussreiche, dafür Danke an die Runde!Grüße
Ody
-
@lefg
Ich möchte mit dem ausgelesenen Pfad innerhalb des Programms Aktionen ausführen wie z.B.
Exen starten und/oder über Taskkill wieder beenden, Logfiles auslesen / kopieren, Sicherungen von Unterordnern durchführen.
@Sunny61
Mein Ansatz ist (war!?) nichts am System zu verändern und flexibel bezüglich der Umgebungen zu sein.
Wenn es nicht geht muss ich mir was anderes überlegen.Bezüglich der Anführungszeichen hab ich alles mögliche versucht, nachdem ich aber den Wert erst über
"Tricks" For und reg query rauskriege hat das nicht geklappt. Theoretisch würde es reichen wenn ich es schaffe
am Anfang und alternativ am Ende Anführungszeichen zu setzten. Das Ende könnte ich wieder als Klartext definieren
wenn ich mein copy, Taskkill usw ausführe.
-
Hallo zusammen,
herzlichen Dank für euer weiteres Feedback!
@lefg
Es gibt in der Registrierung eine Zeichenfolge "Pfad" wo das Installationsverzeichnis des Programms liegt.
Beispiel C:\Program Files (x68)\Programich hab mir für meine Tests einfach einen Schlüssel angelegt mit dem ich rumspiele.
@Sunny61
Das ist ein guter Ansatz, somit kann ich evtl. das Thema "Program Files", "Programme" bzw. "Program Files (x86)" umgehen.
Das hilft mir aber nicht weiter wenn der Unterordner des Programs auch ein Leerzeichen z.B. C:\Program Files (x86)\Mein Program\ hat.@daabm
SETX kannte ich noch nicht, ich hab mir das mal angeschaut, so wie ich das sehe werden da aber fix Umgebungsvariablen gesetztdie auch nach dem ausführen der Batch weiter zur Verfügung stehen. Ich möchte ja nur zur Laufzeit den Pfad aus der Registrierung
auslesen und verarbeiten. Bei meinen Tests hab ich es aber nicht geschafft den Wert in die Variable zu schreiben. Aber da Teste ich noch weiter.
@massaraksch
Da hast du wohl recht, ich bin aber auch von Gestern :-)
Der skip ignoriert die ersten beiden Zeilen was dir der Reg query ausgibt, ich will nur die Zeile wo der Wert der Zeichenfolge enthalten ist,
die wiederum wird mit Token genauer analysiert.@All ich dachte mir das es mit for /f recht einfach möglich ist den Wert komplett in eine temporäre Variable
zu schreiben und zu verarbeiten. So wie es aussieht ist es anscheinend nicht so einfach und ich werde um den Vorschlag von zahni nicht rumkommen?
Vielleicht noch mit zusätlicher Prüfung von findstr? Hab da mal versucht die Leerzeichen zu ermitteln, aber das hat hintern und vorne nicht hingehauen.
Beste Grüße
Ody
-
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
-
ja genau er gib nur alles bis zum ersten Leerzeichen aus
-
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
-
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)\ProgrammWert 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
-
Hallo Cybquest,
super vielen Dank genau das was ich gesucht habe :-)
Beste Grüße
Ody
-
Hallo Zahni,
vielen Dank für den freundlichen Empfang :)
Ich habe fast befürchtet das es auf Powershell oder autoit rauslaufen könnte, als "nicht Scripter" ist das mehr als mühsam da was
taugliches zusammen zubekommen.zudem funktioniert Batch fast immer ohne großartig im OS was aktivieren zu müssen.
Ich wäre daher dankbar wenn jemand noch Ideen hat.
-
Hallo Expert,
so habe ich es auch hinbekommen, ich hätte aber gerne Datum und Uhreit vor jeder Ausgabe damit auch die
Verzögerungen der einzelnen Aufgaben ins Auge stechen. Hier ein Beispiel:################ Start Batch deaktivieren ################ 02.03.2016 18:15:01,62 Beenden wurde vom Benutzer initiiert... 02.03.2016 18:15:08,59 Es wurde versucht Notepad.exe zu beenden. Resultat: 02.03.2016 18:15:11,31 FEHLER: Der Prozess "notepad.exe" wurde nicht gefunden. 02.03.2016 18:15:11,37 Es wurde versucht Notepad.exe zu beenden. Resultat: 02.03.2016 18:15:16,29 ERFOLGREICH: Der Prozess mit PID 148 (untergeordnetem Prozess von PID 3608) wurde beendet. 02.03.2016 18:15:16,37 usw.... ################ Ende Batch deaktivieren ################ ################ Start Batch aktivieren ################ 02.03.2016 18:22:15,32 Starten wurde vom Benutzer initiiert... 02.03.2016 18:22:15,38 Notepad wurde gestartet mit dem Errorlevel: 128 02.03.2016 18:22:20,31 usw... ################ Ende Batch aktivieren ################
-
Hallo zusammen,
ich habe bereits etwas recherchiert aber nicht wirklich eine Lösung gefunden.
Hier war bereits ein erster Ansatz ersichtlich der geholfen hat Thema "2>&1" ergänzen damit auch dies ins Logfile umgelenkt wird.
Hier sind leider Keine Antworten enthalten
Ich hoffe hier kann mir jemand weiterhelfen.
Nun zu meinem Anliegen:Ich möglich eine Detailgenau Protokollierung in ein Logfile schreiben wo jeder Eintrag mit Datum %DATE% und Zeit %TIME% beginnt.
Beispiel taskkill:@echo off taskkill /IM notepad.exe /F /T >> .\tmp.log 2>&1 pause
Funktioniert super, aber eben ohne Datum und Uhrzeit vorneweg. Was auch immer ich versucht habe ich hab es nie vor die Zeile der eigentlichen Ausgabe bekommen.
Resultat tmp.log:
ERFOLGREICH: Der Prozess mit PID 1248 (untergeordnetem Prozess von PID 3608) wurde beendet. FEHLER: Der Prozess "notepad.exe" wurde nicht gefunden. ERFOLGREICH: Der Prozess mit PID 10420 (untergeordnetem Prozess von PID 3608) wurde beendet. ERFOLGREICH: Der Prozess mit PID 1248 (untergeordnetem Prozess von PID 3608) wurde beendet. FEHLER: Der Prozess "notepad.exe" wurde nicht gefunden.
Das ganze ist bestimmt mit einer IF Schleife lösbar, nur hab ich dazu leider zu wenig Kenntnisse in der Hoffnung auf Erleuchtung durch euch.
Gleich vorweg noch ein paar Fragen, Die Logdatei führt mehrere exen aus somit werde ich auch bestimmt eine verschachtelte IF Schleife brauchen.
Hier noch ein Beispiel:for /f %%i in ('vmrun -T ws getGuestIPAddress %VM%') do Set ipvm=%%i
Dies ermittelt die IP-Adresse eine Virtuellen Maschine unter vmware Workstation (%VM% Pfad zur .vmx Datei) und schreibt die IP-Adresse in %IPVM%
Bekomm ich das auch in die Logdatei (Meldungen der exen natürlich vorausgesetzt), ansonsten schreibe ich selbst ein Eintrag wie z.B.
echo %DATE% %TIME% vmware TESTSYSTEM wurde gestartet mit dem Errorlevel: %errorlevel%>> .\tmp.log
Ein Errorlevel auszugeben scheint nicht unbedingt zielführend, da die Werte von exe zu exe abweichen und meist ein 128 oder 9009 zurückgibt.
Muss man das Errorlevel eventuell zurücksetzten wenn immer wieder in einer Batch abgefragt wird? SETLOCAL ist z.B. auch gesetzt wobei das vermutlich kein Zusammenhang hat.Ich hoffe das sind nicht zu viele Fragen auf einmal. Vielen Dank im voraus für eure Feedback
Grüße
Ody
Batch Variable aus Registrierung mit Leerzeichen
in Windows Forum — Scripting
Geschrieben
Hallo Massaraksch,
gut das du nochmal nachfragst weil mir sonst mein Fehler bei der geposteten Lösung nicht aufgefallen wäre.
Du hast vollkommen recht, jetzt verstehe ich auch dein SKIP Hinweis:
Ich dachte ich muss die ersten beiden Zeile ignorieren was nach meinen erneuten Tests, wie du schon sagtest unsinnig ist.
Deine Variante fügt Token 3 (%%i) mit dem Rest * (%%j) zusammen, leider geht dabei das Leerzeichen zwischen den beiden Variablen
verloren, also zwischen "C:\Program" und "Files...".
Lösung ist ab Token 2 zu Starten und * also nur %%j zu verwenden:
Nochmal Danke an Alle und besonders an lefg und massaraksch!
Grüße
Ody