![]() |
String Formatieren/Parsen
Hallo,
ich habe ein Problem damit strings folgender art zu Parsen bzw. zu Formatieren: RUNDLL32.EXE C:\WINDOWS\system32\NvCpl.dll,NvStartup %systemroot%\system32\dumprep 0 -k "C:\Programme\Java\jre1.6.0_03\bin\jusched.exe " C:\WINDOWS\PCHealth\HelpCtr\Binaries\MSConfig.exe /auto "C:\WINDOWS\PCHealth\HelpCtr\Binaries\MSConfig.exe " - scan ALCWZRD.EXE /Test Was ich will ist den genauen pfad zur jeweiligen exe/dll datei. Diese strings sind werte aus der "Autostart" Registry. Ich möchte halt die ganzen pfade zu den Dateien erhalten. Ich frage mich woher ich z.B. erhalten kann das im "ALCWZRD.EXE /Test" string die "ALCWZRD.EXE" im System32 ordner ist? Ich hoffe jemand kann mir weiterhelfen, denn das Problem hatte ich in letzter seit oft gehabt, ich habe sogar meine eigenen String-Matching/Parsing Methoden geschrieben nur irgendwie hat das so keinen sinn. Danke fürs lesen! |
Re: String Formatieren/Parsen
|
Re: String Formatieren/Parsen
Ok klar ist das suchen nach der Datei ne möglichkeit, nur wie soll ich suchen wenn ich aus den Obigen strings nichtmal den gültigen dateinamen erhalten kann? Ist das nicht auch uneffizient wenn man die ganze platte nach der datei sucht??
|
Re: String Formatieren/Parsen
sry wenn ich das etwas falsch verstanden habe ;), aber suche doch einfach nach .exe oder .dll
|
Re: String Formatieren/Parsen
Guck dir mal das an:
![]() Da sollte alles drin stehen, was du brauchst... mfg Christian |
Re: String Formatieren/Parsen
so leid es mir für dich tut ist suchen die einzige Möglichkeit und Windows macht es nicht anders. Dadurch das leerzeichen in Dateinamen erlaubt sind kannst du manchmal einfach nicht unterscheiden ob es Parameter sind oder ob der Teil noch zum Dateinamen gehört.
|
Re: String Formatieren/Parsen
Also, da Windows auch nicht hexen kann, muss es doch ein System geben, z.B. sowas:
Wenn 1.Zeichen ein '"' dann suche bis zum nächsten '"' und der Programmname ist Alles dazwischen, ansonsten ist der Programmname alles bis zum ersten Leerzeichen oder Zeilenende, je nachdem, was zuerst kommt. So, nun haben wir den Programmnamen. Nun sind dort vielleicht noch Environment-Variablen ('%Bla%') enthalten. Na ja, dann ersetzen wir die eben (Preisfrage: Woher bekommt man die Windows-Umgebungsvariablen? Da muss es doch was geben... Vielleicht sogar hier im Forum? :zwinker: ) Nun haben wir also Programmnamen mit oder ohne Pfad. Und nun suchen wir. Nur wo? Unterm Bett? Auf der ganzen Festplatte? Bei Google? Nö, Windows ist ja genauso doof wie wir, also gibt es dafür eine Umgebungsvariable 'PATH', und das ist eine durch Semikolon getrennte Liste von Pfadnamen, in denen eine EXE gesucht wird. Ist sie in keinem der Pfade, dann existiert das Programm für Windows auch nicht. Da die letzte Funktion ein wenig aufwändig ist (aber nicht wirklich), existiert vermutlich sogar ein API-Aufruf dafür, sicher bin ich mir aber nicht. Zitat:
Code:
von Windows als einzelne Datei erkannt wird.
Das ist aber ein bloeder Name.EXE
Code:
aber schon, oder?
"Das ist aber ein bloeder Name.EXE"
|
Re: String Formatieren/Parsen
Hi,
es gibt eine SHLWAPI Funktion PathFindOnPath(), welche das Verhalten der Shell (CMD) beim Suchen nach einem ausführbaren Befehl nachbildet - ähnlich wie which unter Unix. Allerdings muss man bei fehlender Extension noch ein paar Zeilen selbst schreiben. Wenn Memo die Strings aus Beitrag #1 enthält, könnte das so aussehen:
Delphi-Quellcode:
Grüße vom marabu
procedure TDemoForm.ButtonClick(Sender: TObject);
var cmd, path: string; i: Integer; begin with Memo do for i := 0 to Pred(Lines.Count) do begin cmd := ExtractField(Lines[i], 0); path := FindCommand(cmd); if path = '' then path := cmd; ShowMessage(ExpandEnvStr(path)); end; end; |
Re: String Formatieren/Parsen
@alzaimar: hexen kann Windows tatsächlich nicht aber es kann prüfen ob eine Datei existiert. Das kannst du dir demonstrieren lassen in dem du mal unter "ausführen" im Startmenü etwas rum probierst.
Folgendes Beispiel: Datei: c:\Name1.bat Ordner: c:\Name1.bat Name2 jetzt geb mal unter Ausführen "c:\Name1.bat Name2" ein und lass dich überraschen ob die Datei ausgeführt wird oder der Ordner geöffnet wird. Ergebnis: Es wird der Ordner geöffnet löschst du den Ordner wird die Datei ausgeführt. Folglich scheint Windows zu suchen was da ist. |
Re: String Formatieren/Parsen
Sir Thornberry: Wir reden aber nicht vom 'aktuellen Verzeichnis'. Ich bezweifle, das Windows eine Datei namens 'Sir Thornberry.EXE' im PATH findet, wenn Du 'Sir Thornberry' im Commandprompt eintippst, und Du dich in einem anderen Verzeichnis befindest.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:34 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz