Jump to content

Ody

Members
  • Gesamte Inhalte

    16
  • Registriert seit

  • Letzter Besuch

Beiträge erstellt von Ody

  1. 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:

    C:\>reg query HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\MeinProgram\ /v Pfad
    										skip 1
    HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\MeinProgram				skip 2
        Pfad    REG_SZ    C:\Program Files (x86)\Mein Program\
    

    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:

    for /f "tokens=2,*" %%i in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\MeinProgram" /v Pfad') do set VAR=%%j
    

    Nochmal Danke an Alle und besonders an lefg und massaraksch!

     

    Grüße
    Ody

  2. 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

  3. 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

     

  4. @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.

  5. 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)\Program

    ich 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 gesetzt

    die 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

     

  6. 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
     


     

  7. 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
     

  8. 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
     


     

  9. 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.

  10. 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 ################
  11. Hallo zusammen,

     

    ich habe bereits etwas recherchiert aber nicht wirklich eine Lösung gefunden.

     

    http://www.mcseboard.de/topic/191108-taskkill-sämtliche-ausgaben-in-txt-schreiben/?hl=%2Bbatch+%2Blog

    Hier war bereits ein erster Ansatz ersichtlich der geholfen hat Thema "2>&1" ergänzen damit auch dies ins Logfile umgelenkt wird.

     

    http://www.mcseboard.de/topic/184098-erfolgreich-nicht-erfolgreich-batch-in-log-file-schreiben/?hl=%2Bbatch+%2Blog

    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
     

     


     

×
×
  • Neu erstellen...