Hallo liebe Leute,
entweder hat Windows 7 SP1 x64 oder FileCreateShortcut() in AutoIt 3.3.16.1 einen Bug, denn in der englischen sowie deutschen Hilfe steht:
ZitatFileCreateShortcut() benötigt kein gültiges Ziel …, um die .lnk-Datei "erfolgreich" anzulegen.
Erstelle ich eine Verknüpfung mit einem gültigen Zielpfad, der Leerzeichen enthält, wird der gesamte Pfad in doppelte Anführungszeichen gesetzt, ebenso beim Arbeitsverzeichnis. So weit so gut.
Erstelle ich eine Verknüpfung mit einem ungültigen Zielpfad, der Leerzeichen enthält, jedoch auf ein eingebundenes Laufwerk verweist, wird der gesamte Pfad ebenfalls in doppelte Anführungszeichen gesetzt. Auch das ist in Ordnung.
Erstelle ich eine Verknüpfung mit einem ungültigen Zielpfad, der Leerzeichen enthält, jedoch auf ein nicht eingebundenes Laufwerk verweist, wird der Pfad nicht mehr in doppelte Anführungszeichen gesetzt und alle Leerzeichen durch Unterstriche ersetzt. Das ist ein Fehler, den ich nicht beheben kann, weder mit im Zielpfad übergebenen doppelten Leerzeichen noch mit angehängtem \nul.ext, weil ich eigentlich nur ein Zielverzeichnis verknüpfen will.
Hier ein Beispielskript fürs Verständnis und einfacherem Nachvollziehen:
AutoItSetOption('MustDeclareVars', 1)
Global $s = ''
; Letzten freien Laufwerksbuchstaben ermitteln
For $i = Asc('Z') To Asc('A') Step -1
$s = Chr($i) & ':\'
If FileExists($s) = 0 Then ExitLoop
$s = ''
Next
; Bei Fehlschlag Meldung anzeigen und abbrechen
If $s = '' Then
MsgBox(16, 'Fehler', 'Kein Laufwerksbuchstabe frei!')
Exit 1
EndIf
; Pfade festlegen und Verknüpfung erstellen
$s &= 'Ungültiger Pfad mit Leerzeichen'
FileCreateShortcut($s & '\nul.ext', @ScriptDir & '\Test.lnk', $s)
; Skriptende
Exit 0
Alles anzeigen
Kann jemand dieses Verhalten bestätigen und mir vielleicht sogar eine Lösung präsentieren oder falls es ein Bug von AutoIt ist, diesen bitte den Entwicklern mitteilen?
Wenn sich jemand fragt, wozu ich dieses Szenario brauche:
Ich wechsele hin und wieder meine Laufwerke, wovon jedes einen anderen Laufwerksbuchstaben zugewiesen bekommt, jedoch die betreffende Pfadstruktur auf all diesen Laufwerken dieselbe ist. Durch eine der Verknüpfungen kann ich schnell in den gewünschten Pfad springen und muss nur noch die nach dem Laufwerk benannte passende Verknüpfung anklicken. Ist das Laufwerk nicht eingebunden, so ist die Verknüpfung vorübergehend ungültig. Weil ich aber dieselbe Verknüpfung für alle Laufwerksbuchstaben haben möchte, schrieb ich mir ein AutoIt-Skript, mit dem ich nicht erst alle Laufwerksbuchstaben belegen muss.
Ich könnte auch mit dem Programm Visual Subst alle Laufwerksbuchstaben nacheinander einem bestehenden Verzeichnis virtuell zuweisen und so alle gewünschten Verknüpfungen erstellen, aber dann könnte ich auch das Ausfüllen der Eingabefelder im Eigenschaftendialog von Windows händisch erledigen und bräuchte kein Skript mehr. Außerdem wäre mir dann dieser Fehler nicht aufgefallen.
Gruß, fee