jk87
Goto Top

Position einer Datei mittels Bat bestimmen

Hallo!

Kann man die Position einer Datei bestimmen?

Die Datei test.exe befindet sich auf einem Laufwerk in einem Ordner, welche beide nicht bekannt sind, im gleichen Ordner befindet sich auch test.ini. Die EXE soll nun feststellen in welchen Ordner sich die EXE befindet und den Pfad zwichen speichern um die test.ini zufinden.
Das soll alles nach möglichkeit in der test.exe stattfinden!

Oder hat jemand eine andere Lösung für mein Problem?

Hab eine Bat->Exe geschrieben welche Daten aus einer Ini im gleichen Ordner wie die Exe holt.
Ich möchte diese mit dem VPN Novell Client starten welcher das ausführen nach dem Verbinden unterstützt, jedoch kann ich kein "Ausführen in - Ziel" angeben wie es zum beispiel bei normalen Verküpfungen funktioniert.

zB


Hoffe irgend jemand hat eine Lösung.
Danke im Voraus!

JK

Content-ID: 17796

Url: https://administrator.de/contentid/17796

Ausgedruckt am: 25.11.2024 um 16:11 Uhr

8644
8644 14.10.2005 um 18:17:30 Uhr
Goto Top
Hi,

sorry, aber ich verstehe nicht so ganz, was du möchtest!
Du möchtest das Verzeichnis einer Datei namens test.exe finden?
Anhand dieser Pfadangabe weißt du wo die test.ini liegt? - Warum nicht gleich nach der test.ini suchen?
Dann soll der VPN Client beim starten die test.exe ausführen?

Erklär mal etwas näher bzw. verständlicher! Oder bin nur ich verwirrt?

Psycho
11078
11078 14.10.2005 um 18:20:10 Uhr
Goto Top
Hallo,

also wenn ich das richtig verstanden habe, hast Du aus einer BAT eine EXE gemacht und Du möchtest jetzt wissen, mit welchem Batch-Befehl man herausfinden kann, in welchem Verzeichnis die BAT/EXE jetzt ist, richtig?

Der Befehl heißt einfach: cd (ohne Punkte, etc.).
Liefert das aktuelle Arbeitsverzeichnis als String zurück.


Gruß,
Tim
JK87
JK87 14.10.2005 um 19:12:49 Uhr
Goto Top
Ich möchte nur, dass der VPN Client die test.exe ausführt und die in der test.ini enthaltenen Daten von test.exe gefunden werden. --> ohne VPN funkt es ganz normal, aber mit dem VPN findet er die ini nicht mehr (weil er ja nicht weis in welchem Verzeichnis er die Datei ausführen soll, zB siehe Screenshot)!

Hoffe jetzt verstehst du mein Problem!
Vielleicht war die Frage wirklich etwas verwirrend!

JK
JK87
JK87 14.10.2005 um 19:13:36 Uhr
Goto Top
Genau du hast es verstanden!

Das bringt mich schon einen Schritt näher zu meinem Ziel.

thx

JK
JK87
JK87 16.10.2005 um 13:19:37 Uhr
Goto Top
Der Befehl funktioniert einwandfrei!

Allerdings bewirkt er nicht das Richtige was ich wollte.
Wenn ich die Exe über die Verknüpfung aufrufe, gibt er mir als cd den Desktop aus!
Gibt es eine Möglichkeit wo er mir den Ort der Exe ausgibt?

thx

JK
gemini
gemini 16.10.2005 um 14:00:54 Uhr
Goto Top
Hallo Jörg,

wenn ich dich richtig verstehe möchtest du eine Verzeichnisstrutur rekursiv nach einer bestimmten Datei durchsuchen und das übergeordnete Verzeichnis dieses Pfades in einen Link als WorkDir eintragen.
Dafür ist cd nicht geeignet, das liefert nur das aktuelle Verzeichnis zurück.

Wenn es mit BAT gelöst werden muss, sieh dir die Beiträge von Biber an!

Ein VBScript das Verzeichnisse rekursiv durchläuft findest du hier:
Finden von Office-Dateien mit Schreibschutz
Muss halt noch ein wenig umbauen, ist aber nicht schwer.
On Error Resume Next ist in diesem Script zwingend notwendig, da sonst in Verzeichnissen für die keine Rechte bestehen (bspw. System Volume Information) Fehler erzeugt werden.
Wenn die Datei gefunden wurde, kannst du mit dem Befehl ParentFolder des FileSystemObjects den übergeordneten Ordner ermitteln.

Eine Erläuterung wie man Links per Script erstellt, verteilt und bearbeitet inkl. entspr. VBScripte findest du auf den Seiten von Roland Weisskopf, EagleSoft Ltd.
http://mypage.bluewin.ch/eaglesoft/infopages/vbs/vbsshort.htm

Ich hoffe das hilft dir ein wenig weiter.
gemini
Biber
Biber 16.10.2005 um 14:25:58 Uhr
Goto Top
Moin Jk87,

die Funktionalität, die Du suchst, bekommst Du über den (immer vorhandenden) Parameter %0.
Wenn Du testweise in Deiner Bat-Datei einbaust:
@echo Name der Datei: %0
...bekommst Du Namen und Pfad geliefert, z.B. "d:\test\beispiel"

Du kannst es noch verfeinern als (einen oder mehrere Buchstaben von)
%~dpnxtz0 ... d wie drive, p wie path, n wie name, x wie eXtension, z wie siZe, t wie dateTime..

Was Du also brauchst, sind Drive und Path, also d und p.
~~~~...
set Verzeichnis=%~dp0
echo Verzeichnis der Bat-Datei %verzeichnis%, aktuelles Verzeichnis ist %cd%
~~~..
Sollte das liefern, was Du haben willst.
Das oben in den ersten Posts beschriebene %cd% (bzw. die Abfrage des Befehls "cd") liefert schon das Richtige, nämlich das Verzeichnis, von dem Du aufrufst. Also den Desktop.

HTH und Greetz
Biber

[Edit] Parameter n hatte ich vergessen.. braucht man/frau auch gelegentlich. [/Edit]
gemini
gemini 16.10.2005 um 14:36:43 Uhr
Goto Top
@Biber
@echo Name der Datei: %0
...bekommst Du Namen und Pfad geliefert,
z.B. "d:\test\beispiel"
%0 liefert das aktuelle Verzeichnis zurück, vgl. pwd

Ich habe es so verstanden, dass das Script eine Datei suchen muss.
Diese Datei "... befindet sich auf einem Laufwerk in einem Ordner, welche beide nicht bekannt sind,..."
In diesem Fall würde %0 nicht weiterhelfen, genausowenig wie cd, weil ja bei beiden das Verzeichnis bekannt sein und die Batch darin gestartet werden müsste.

Oder versteh ich da was falsch *grübel*
So wirklich leichtverständlich, zuminest für Leute in meinem Alter, ist das Posting ja nicht face-wink

gemini
Biber
Biber 16.10.2005 um 14:54:27 Uhr
Goto Top
@gemini

Hmmm... *auch am Kopf kratzt
Die Datei test.exe befindet sich auf einem Laufwerk in einem Ordner, welche beide nicht
bekannt sind, im gleichen Ordner befindet sich auch test.ini. Die EXE soll nun feststellen
in welchen Ordner sich die EXE befindet und den Pfad zwichen speichern um die test.ini
zufinden.
Das soll alles nach möglichkeit in der test.exe stattfinden!

Also, wenn die *.Exe was-auch-immer macht, muss sie aufgerufen werden.
Also z.B. im Suchpfad %path% stehen. Das wäre ein Fall, in dem die *.Exe läuft, ohne dass ich vorher weiß, in welchem Verzeichnis sie steht.

Aber ist ein bisschen unklar ausgedrückt... vielleicht schwankt JK87 noch zwischen Admin- und Politiker-Laufbahn.

@JK87: Kannst Du noch mal bitte die Anforderung umformulieren?
Wenn ich es falsch verstanden habe und der Pfad der "Test.ini" das ausschlaggebende ist, wäre natürlich ein anderer Oneliner sinnvoll (eine FOR /R ...IN..DO-Schleife, also eine rekursive Suche, wie gemini schon geschrieben hat).

Biber

[Edit] @gemini
So wirklich leichtverständlich, zuminest für Leute in meinem Alter, ist das Posting ja nicht
Selbst für jüngere und vitalere wie mich ist es schwierig face-big-smile
[/Edit]
gemini
gemini 16.10.2005 um 16:14:46 Uhr
Goto Top
@Biber
Selbst für jüngere und vitalere wie mich ist es schwierig face-big-smile [/Edit]
Das beruhigt mich ungemein. Puuhh

Dann ist es also nicht beginnende Altersenilität sondern nur der normale geistige Abbau bei über 30-jährigen face-wink
JK87
JK87 24.10.2005 um 11:52:13 Uhr
Goto Top
@Biber
Erstmal Sorry für die verspätete Antwort!

Du hast das vollkommen richtig verstanden.
Oder kennst du eine andere Möglichkeit damit meine bat/exe die ini findet, wenn ich sie ohne "Ausführen in" vom Desktop starte (exe und ini liegen im selben ordner)?

thx

JK
Biber
Biber 24.10.2005 um 13:21:28 Uhr
Goto Top
Moin, Jörg,

ich würde es wirklich erst so versuchen wie oben beschrieben.
~~~~...
set Verzeichnis=%~dp0
echo Verzeichnis der Bat-Datei %verzeichnis%, aktuelles Verzeichnis ist %cd%
~~~..

Sollte das, warum auch immer nicht klappen, dann wäre die nächst-aufwändigere Strategie, tatsächlich diese Datei zu suchen... mit FOR /R..IN.. DO oder was-auch-immer.

Oder (wie es ja auch viele Applikationen machen) darauf zu bestehen, dass der Pfad der *.ini-Datei in einer Umgebungsvariablen definiert sein muss/in der Registry zu finden ist.
Aber so etwas wäre für mich immer nur Plan B.

Funktioniert denn der Weg oben über "%~dp0" bei Dir nicht?

Grüße
Frank / der Biber aus Bremen
JK87
JK87 24.10.2005 um 13:28:50 Uhr
Goto Top
Wenn ich die Exe direkt vom Verzeichnis aus starte gibt er mir den richtigen Pfad aus, aber wenn ich sie über die Verknüpfung am Desktop starte gibt er mir das Temp-Verzeichnis des aktuellen Benutzers aus!

Funktioniert also nicht so wie ich das möchte!

JK
Biber
Biber 24.10.2005 um 13:50:20 Uhr
Goto Top
Tja, Jörg,

dann wird diese wohl so arbeiten, dass sie zwar als *.exe gestartet wird, aber den "eigentlich" auszuführenden Originalbatch wirder 1:1 im %temp%-Verzeichnis erzeugt und anschließend weglöscht.
Wenn Du also aus irgendwelchen Gründen eine *.exe haben willst/musst... dann fürchte ich, musst Du den Weg über Umgebungsvariable"MeinInstVerzeichnis" oder einen Reg-Eintrag gehen. Als purer Batch würde es wohl funktionieren.

Oder die Test.ini (oder wie sie halt heißen mag) tatsächlich suchen. Aber das Suchen ist natürlich am fehlerträchtigsten - kann ja immer mehrere Dateien mit diesem Namen geben.

Auf wie vielen Rechnern läuft denn die Anwendung? Und sind das alles für Dich erreichbare Clients?
Biber
JK87
JK87 24.10.2005 um 14:02:32 Uhr
Goto Top
Läuft auf unbestimmt viele Rechner welche ich nicht als Client erreicbar sind!
Grund: Programm soll für jeder man funktionieren!

JK
JK87
JK87 24.10.2005 um 14:03:23 Uhr
Goto Top
Läuft auf unbestimmt viele Rechner welche ich nicht als Client erreicbar sind!
Grund: Programm soll für jeder man funktionieren!

JK
JK87
JK87 24.10.2005 um 14:04:13 Uhr
Goto Top
Läuft auf unbestimmt viele Rechner welche ich nicht als Client erreicbar sind!
Grund: Programm soll für jeder man funktionieren!

JK
JK87
JK87 24.10.2005 um 14:05:10 Uhr
Goto Top
Läuft auf unbestimmt viele Rechner welche ich nicht als Client erreicbar sind!
Grund: Programm soll für jeder man funktionieren!

JK
Biber
Biber 24.10.2005 um 14:19:10 Uhr
Goto Top
Tja, hinterlegst Du denn den Inst-Pfad bei der Installation irgendwo in der Registry?
Das wäre ja das nächst elegantere...
Sonst sind wir wieder bei wackeligen Lösungen...
Angelehnt an das obige Bildchen wäre denkbar eine Prüfung a la

...
set "testIni="
if exist "%ProgramFiles%\VideoLan\test.ini" set "testini=%ProgramFiles%\VideoLan\test.ini"
...
JK87
JK87 24.10.2005 um 14:25:41 Uhr
Goto Top
Hab das Setup mit WinRar SFX gemacht, das hinterlegt anscheinend einen Eintrag in die Registry!

Was ist damit möglich?
Einfach auslesen aus der Registry lassen oder?

JK
Biber
Biber 24.10.2005, aktualisiert am 17.10.2012 um 16:07:03 Uhr
Goto Top
Ja, das hört sich schon besser an..

Du kannst das nach dem Muster dann schnell abprüfen (das Beispiel hatte tim.frodermann heute in einem anderen Beitrag Drucker aus Registry mittels Batchdatei auslesen )

@echo OFF
set "RegKey=HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Devices"
:: Delims ist ein Tab gefolgt von einem Leerzeichen
FOR /F "TOKENS=2* DELIMS= " %%A IN ('REG QUERY "%regKey%"') DO SET Drucker=%%B
ECHO %regkey%=%Drucker%
~~~~

Musst bloß Deinen RegKey wissen...

Biber
Biber
Biber 24.10.2005, aktualisiert am 17.10.2012 um 16:07:09 Uhr
Goto Top
Nachtrag:

1. Hatte die Links vorhin nicht griffbereit bzw. anderes zu tun.
tim.frodermann hat mal ein ganz nettes Tutorial zu dem Thema Die Windows-Registry mit reg-Dateien bearbeiten geschrieben. Hilft bestimmt.
2. Und - mein Fehler vorhin - Du kannst natürlich bei Deinen unbekannten Anwendern nicht voraussetzen, dass die eine Reg.exe haben.
Also musst Du über mit 'RegEdit.exe /e "%temp%\jk.reg" ...' eine Textdatei erzeugen und die mit "find" durchflöhen.
Dazu hab ich <a href= target="blank">im Teil III meines Batch-Workshops</a> ein Beispiel.

HTH Biber
JK87
JK87 27.10.2005 um 15:06:15 Uhr
Goto Top
thx Biber

kann das Verzeichnis aber auch nicht mit der registry konstruieren
Grund: Der Name des Registry-Eintrags mit dem Pfad lautet genauso wie der Pfad, sprich "C%%Programme%ProxyOnOff"="C:\\Programme\\ProxyOnOff" und das weis ich eben nicht wo der benutzer es hin installiert hat. --> WinRarSFX

Kannt du mir vielleicht einen anderen Weg sagen?

JK
Biber
Biber 27.10.2005 um 16:02:19 Uhr
Goto Top
@JK87
...das ist aber lumpig von den WinRarSfx-Codern...
Da hätte ich aber Verbesserungsvorschläge *kopfschüttelt

Tja, dann bleiben Dir noch eine simple, eine umständliche, eine unsichere und eine benutzerunfreundliche Strategie:

1. Die Simple:
Schreibe bei der Installation mit RegEdit (notfalls liefere eine *reg-Datei mit) irgendwo in die Registry HKCU einen Schlüssel, den Du wiederfindest. Mit dem Inst-Pfad. Fertig. Dein InstProg müllt doch eh in die Registry rein.

2.Die Umständliche
Bei der Installation eine dauerhafte Umgebungsvariable setzen.
Set "ProxyOnOffDir=x:\PfadZumProg"
... aber da brauchst Du auch wieder entweder "PathMan.exe" aus dem ResKit ODER Du schreibst es in die Registry in den User-Path... dann klappt es erst nach Neustart.
Da ist selbst Methode 1 eleganter. Und unsicher ist es auch ...

3. Die mit Abstand unsicherste Methode
Alle (lokalen) Laufwerke absuchen nach Deiner "*.ini"... mit FOR /R...IN..DO.
Da gibt es unter "Suchen nach pst-Dateien" ein paar Beiträge..
Aber das klappt nur halbwegs zuverlässig, wenn Deine Ini-Datei einen relativ exotischen Namen hat. Wenn da zwei gleichnamige Dateien gefunden werden, stehst Du wieder dumm da.

4. Die benutzerunfreundliche Methode
Prompten nach dem Pfad. Mit "Set /P " oder einer Messagebox...
Aber das verzeiht Dir kein Anwender... ist nur eine hypothetische Möglichkeit.

Mehr fällt mir aus dem Stand nicht ein... aber vielleicht hat jemand anders noch eine Idee.

Grüße
Biber