evinben
Goto Top

Batch-Datei wird über eine Verknüpfung ausgeführt. Wie den Pfad zu der Verknüpfung ermitteln und dem aufgerufenen Batch übergeben?

Hier wird nicht der Pfad zu dem Verknüpfungsziel (zu der Verknüpfungsdatei) gesucht, sondern zu der Verknüpfung.

Aufgabe:
Eine Batch-Datei befindet sich in einem Verzeichnis Nr. 1 und eine Verknüpfung zu ihr in einem anderen (z. B. hier Nr. 2).
Diese Batch-Datei wird über die Verknüpfung ausgeführt und der laufende Bach soll nun in der Lage sein zusätzlich zu dem Verzeichnis der Verknüpfung zu wechseln, um dort paar Dateien zu verarbeiten, da deren Pfade in der Batch-Datei nicht "absolut", sondern "relativ" eingetragen sind.
Also um das Vorhaben zu ermöglichen, soll zumindest das Verzeichnis der Verknüpfung oder noch besser der vollständige Pfad zu ihr dem aufgerufenen Batch übergeben werden (bei der letzten Variante könnte der Batch sogar - abhängig von dem Namen der Verknüpfung - mit Bedingungen verarbeitet werden).
Die Große Frage ist nun: Wie den vollständigen Pfad zu der Verknüpfung bzw. nur das Verzeichnis der Verknüpfung dem aufgerufenen Batch übergeben?

Hallo,

wie kann man den Pfad der Verknüpfung selbst ermitteln?
Leider keine gelösten Beiträge konnte ich finden. Geht das wohl wirklich nicht?
Es ist nämlich aus diesem Grund wichtig den Pfad zu der Verknüpfung dem ausgerufenen Batch zu übergeben, da es in verschiedenen Verzeichnisse unterschiedliche Verknüpfungen zur derselben Batch-Datei gibt, der Batch soll allerdings nur das verarbeiten, was in dem Ordner der jeweiligen Verknüpfung liegt.

PS: Klar, dass das Vorhaben auch dann klappt, wenn die berühmte Eigenschaft „Ausführen in“ der jeweiligen Verknüpfung mit dem Pfad ihres Verzeichnisses ergänzt wird, ist aber eine „Weich-Ei"-Methode – unschön und nur als Notlösung zu gebrauchen, da dies bei jeder Verknüpfung manuell angepasst werden muss.

Gruß
evinben

Content-Key: 181387

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

Ausgedruckt am: 29.03.2024 um 10:03 Uhr

Mitglied: bastla
bastla 03.03.2012 um 16:39:59 Uhr
Goto Top
Hallo evinben!

Die ganz Harten würden da vermutlich %cd% verwenden ... face-wink

Grüße
bastla
Mitglied: evinben
evinben 03.03.2012 um 18:28:36 Uhr
Goto Top
Hallo @bastla!

vielen Dank mit deiner exzellenten Bereitschaft!!!
Mit %CD% habe ich vor dem Posten schon mal probiert und das Verzeichnis der Verknüpfung wird nur dann angezeigt, wenn die Eigenschaft „Ausführen in“ lehr ist. Wenn allerdings eine Verknüpfung zu einer Datei erstellt wird (z. B. rechte Maustaste > Kopieren > Verknüpfung einfügen) dann wir die Eigenschaft „Ausführen in“ automatisch ausgefüllt. D. h. diese muss gelöscht werden, damit %CD% dann den richtigen Verzeichnispfad anzeigt, ansonsten zeigt die Variable den Verzeichnispfad der Verknüpfungsdatei an.

???

Wenn es nicht anders geht - also eine manuelle Nachbearbeitung nicht vermeidbar wäre, muss ich es einfach akzeptieren. Ich dachte mir, dass ihr eventuell wieder ausgefallene Lösungen parat habt ;).

Ansonsten benutze ich den vbs-Code von @frimler Verknüpfung auf ungültiges Ziel erstellen zur Erstellung einer Verknüpfung. Hmm, was mir gerade jetzt einfällt, da wird die Eigenschaft „Ausführen in“ leider nicht behandelt.
Vielleich hast du eine Idee?

Gruß
evinben.
Mitglied: bastla
bastla 03.03.2012 um 21:34:26 Uhr
Goto Top
Hallo evinben!

Wie jetzt - ich dachte, Du wolltest es ohne "Ausführen in" ... face-wink
da wird die Eigenschaft „Ausführen in“ leider nicht behandelt.
Da tust Du Friemler aber unrecht - er hat sehr wohl auch "WorkingDirectory" genannt ...
Wozu soll denn das Ganze dienen? Wenn es darum ginge, einen Batch aus verschiedenen Vezeichnissen aufrufen zu können, müsstest Du die Verknüpfung ja nur einmal erstellen, "Ausführen in" entfernen und könntest dann die .lnk-Datei ja an die gewünschten Orte kopieren ...

Grüße
bastla
Mitglied: evinben
evinben 03.03.2012 um 22:14:29 Uhr
Goto Top
Hallo @bastla,

oh, Entschuldigung. Dann vertausche ich was: welche Methode wäre dann für die Eigenschaft „Ziel“ verantwortlich?

Danke schön

Gruß
evinben.

PS: Ich mache es so, wie du es geschrieben hast. Ich habe nur gehofft, dass der Pfad des Verzeichnisses, in dem die Verknüpfung sich befindet, ausgelesen werden kann, unabhängig von ihren gesetzten Eigenschaften.
Mitglied: bastla
bastla 03.03.2012 um 22:19:47 Uhr
Goto Top
Hallo evinben!

Was in dem von Dir verlinkten Beitrag klingt denn am ehesten nach "Ziel"? face-wink (BTW: "TargetPath" ist eine Eigenschaft ("property"), keine Methode.)

Grüße
bastla
Mitglied: evinben
evinben 04.03.2012 um 08:31:41 Uhr
Goto Top
Hallo @bastla,

danke dir, es stimmt. Die Frage war ein Fehler von mir, es fehlt etwas anders:
Heißt es dann, dass „WorkingDirectory“ sowohl die Eigenschaft „Ausführen in:“ als auch den Speicherort der Verknüpfung setzt?
Jetzt wird mir es verständlicher.

Gruß
evinben
Mitglied: bastla
bastla 04.03.2012 um 11:32:18 Uhr
Goto Top
Hallo evinben!

Deine Frage ist mir nicht wirklich klar - der Speicherort wird ja bei der Erstellung des Objekts (per "CreateShortcut") angegeben ...

ZB hier findest Du (unter "Arbeiten mit Verknüpfungen") noch ein paar Infos zum Thema - ansonsten natürlich noch die MS-Doku dazu ...

Grüße
bastla
Mitglied: rubberman
rubberman 04.03.2012 um 14:15:17 Uhr
Goto Top
Hallo evinben und bastla.

Ich weiß auch nicht wirklich worauf das hinaus läuft. Ich verstehe das so:
- Ein Batchfile wird über eine Verknüpfung aufgerufen.
- Der Batchcode soll ermitteln, wo die aufrufende Verknüpfung liegt.

Dazu fällt mir leider garnichts ein. Weder die Kommandozeile (%CMDCMDLINE%), noch der Parent-Prozess (über Umwege per WMIC zu finden) sagen irgendetwas darüber aus. Bleibt nur die von evinben so genannte „Weich-Ei"-Methode -- Die Eigenschaft "Ausführen in" leer lassen und fertig. Wurde ja bereits gesagt, dass der Batch dann im Verzeichnis der Verknüpfung ausgeführt wird -- Ergo %cd% beinhaltet dieses Verzeichnis, %~dp0 dagegen den Pfad der Batchdatei. Beides zusammen sollte doch jedwede Probleme lösen, oder?

Grüße
rubberman
Mitglied: evinben
evinben 04.03.2012 um 16:12:47 Uhr
Goto Top
Hallo @bastla

irgendwie war eine Blockade in mir beim Auseinandersetzen mit dem Skript. Stimmt, es ist dumm von mir gewesen, da es in dem von mir angegebenen Link tatsächlich alle angefragten Eigenschaften angegeben waren.

Hallo @rubberman,
ich werde die „Weich-Ei“-Methode einsetzen: Die Verknüpfungen manuell zu erstellen, diese ohne der gesetzten Eigenschaft „Ausführen in“ zu verteilen, damit die Variable %CD% den korrekten Speicherort der Verknüpfung an die Batch-Datei übergeben kann, ist auch eine Lösung.
Zumindest habe ich probiert bessere Wege kennenzulernen. Wenn es aber noch keine Methode gibt den Pfad der Verknüpfung unabhängig von ihren gesetzten Eigenschaften an die verknüpfte Batch-Datei zu übermitteln, dann werde ich es akzeptieren müssen – "schlimm" ist es nicht.

Gruß
evinben
Mitglied: rubberman
rubberman 04.03.2012 um 18:23:30 Uhr
Goto Top
Hallo evinben.

Zitat von @evinben:
ich werde die „Weich-Ei“-Methode einsetzen: Die Verknüpfungen manuell zu erstellen, diese ohne der gesetzten Eigenschaft „Ausführen in“ zu verteilen, damit die Variable %CD% den korrekten Speicherort der Verknüpfung an die Batch-Datei übergeben kann

Wie bastla bereits angemerkt hat, musst du nicht manuell erstellen, nur weil Eigenschaft „Ausführen in“ ohne Wert bleiben soll.
Du kannst auch explizit einen leeren String übergeben ...
objShortcut.WorkingDirectory = ""
... um auf Friemlers Beispiel zurück zu greifen. Wobei das simple Unterlassen, diese Eigenschaft zu definieren, bereits ausreichen sollte.

Grüße
rubberman
Mitglied: evinben
evinben 05.03.2012 um 08:41:15 Uhr
Goto Top
Hallo rubberman,

da hast du recht. So habe ich es gelost (fast so):
if defined LinkWorkingDirectory		echo objShortcut.WorkingDirectory="%LinkWorkingDirectory%">>%temp%\MakeShortCut.vbs  
…
Die Eigenschaft “WorkingDirectory” ist für das vbs-Skript nicht zwingend erforderlich. Beim Auslassen funktioniert das Script weiterhin und in “Ausführen in“ der Verknüpfung steht nichts ;).
Danke und Entschuldigung für den etwas verwirrten Beitrag.

Gruß
evinben


edit: der Skript > das Skript