Wie erstelle symlink mit Perl?
Versuche, führen Sie den folgenden code in Perl:
symlink($oldname,$newname) or die print "$!\n";
aber ich bekomme eine Fehlermeldung:
The symlink function is unimplemented at C:\...\CreateSymlink.pl line 14.
Wenn ich ändern Sie den code:
link($oldname,$newname) or die print "$!\n";
dann die harte links erstellt, ohne Fehler.
Mit activestate Perl und Windows 7 32-bit.
Irgendwelche Ideen, warum dies geschieht? Ich bin versucht, erstellen Sie symbolische links für eine Datei.
P. S: ich bin ein total Neuling auf Perl.
googeln
Roach Sicher, dass es ... naja, im windows-Versionen, die in den letzten 5 Jahren 😉
Hinweis: die Wörter "wie in *nix". Sie sind ... nicht das gleiche. Sie würden denken, activestate möchte etwas tun, anstatt nur scheitern, aber Sie nicht.
Roach Jemals mklink? Es ist nicht gut wissen, aber nicht im Stich gelassen hat Sie mich noch für einen "symbolischen link"... ich bin sicher, es gibt feine Unterschiede, aber ich habe nicht sah in ihm weiter. Junction-Punkte sind ja verschiedene Tiere.
das ist nicht in perl; es ist ein system-Befehl. Fügen Sie die Tatsache, dass Sie benötigen, um ausgeführt werden, die mit erhöhten Berechtigungen, erstellen Sie eine NTFS-symlinks und ich werde bleiben mit "Nicht das gleiche"
windows symlink perl
gibt sehr viele Informationen über diese. Die kurze Antwort ist, dass es keine solche Sache wie ein "symlink" wie es ist *nix in windows. Die perl-docs Ihnen sagen, dass, wenn das zugrunde liegende Betriebssystem unterstützt keine symlinks, symlink
fehl.Roach Sicher, dass es ... naja, im windows-Versionen, die in den letzten 5 Jahren 😉
Hinweis: die Wörter "wie in *nix". Sie sind ... nicht das gleiche. Sie würden denken, activestate möchte etwas tun, anstatt nur scheitern, aber Sie nicht.
Roach Jemals mklink? Es ist nicht gut wissen, aber nicht im Stich gelassen hat Sie mich noch für einen "symbolischen link"... ich bin sicher, es gibt feine Unterschiede, aber ich habe nicht sah in ihm weiter. Junction-Punkte sind ja verschiedene Tiere.
das ist nicht in perl; es ist ein system-Befehl. Fügen Sie die Tatsache, dass Sie benötigen, um ausgeführt werden, die mit erhöhten Berechtigungen, erstellen Sie eine NTFS-symlinks und ich werde bleiben mit "Nicht das gleiche"
InformationsquelleAutor Red | 2011-10-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Welche "Art" von "symbolischer link"? 😉
Oh, und Lesen Sie den symbolischen link im Wikipedia-Artikel über für die
mklink
Befehl 😉 Back-ticks (oder das system) kann ein guter Freund sein, aber Achtung:Happy coding.
WinAPI CreateSymbolicLink Funktion kann verwendet werden, direkt; ich bin nicht sicher, ob es "leidet" aus der gleichen Einschränkung, wie eine
mklink
Befehl oben. Allerdings dieser thread zeigt, ist es weiterhin in Kraft.FWIW, dieses "Werk" in Strawberry Perl 5.12. YMMV, ich habe gerade getippt, und habe es nie benutzt sonst 🙂
Meine Ergebnisse (lief als "Administrator" -- kann nicht für "andere Benutzer" -- ich weiß nicht warum aber meine cmd.exe immer öffnen mit erhöhten rechten):
Verzeichnis:
Ich habe keine Ahnung, was [subtile] Unterschiede kann es werden, wenn überhaupt, zwischen NTFS symbolische links und "UNIX" symbolische links. Auch die oben nicht funktionieren pre-Vista/2008 -- frühere Versionen von NTFS - nicht Unterstützung von symbolischen links (und früheren Versionen von windows nicht die
CreateSymbolicLink
- Funktion).Dein code funktioniert einwandfrei. Aber wenn ich versuche, im inneren mine dann passiert nichts.
code
use Win32::API; $fn = Win32::API->neu( # Hinweis "Eine" Funktion, IDK wie zu verwenden Unicdoe "kernel32", "BOOLEAN CreateSymbolicLinkA(LPTSTR lpSymlinkFileName, LPTSTR lpTargetFileName, DWORD flags)" ); $hr = $fn->Call($oldname, $newname, 0);code
passiert", oder ...?
Ich fügte hinzu, Druck:
code
$hr = $fn->Call($oldname, $newname, 0) or die print "$!\n";code
jetzt immer in der console: 1 C:\...\CreateSymlink.pl Linie 20.Beachten Sie, dass windows-Aufrufe [meist] wieder eine "Folge" von 0 (scheint abgebildet zu undefiniert??? ... in jedem Fall ist es falsy) auf "Erfolg". Stellen Sie sicher, dass die Pfade (relativ/absolut) korrekt sind und erinnern Sie sich: im "Verzeichnis" Flagge zu link-Verzeichnis. Es ist ein windows-Aufruf, so dass es verwendet die windows-pathing-Regeln. Nicht sicher, was Sie sonst sagen 🙂
InformationsquelleAutor
Machte einen workaround:
InformationsquelleAutor Red