Comment puis-je suivre un raccourci Windows dans Power Shell?

11

J'utilise powershell et j'ai un raccourci vers mon répertoire de destination dans le répertoire courant. Je veux changer le répertoire courant en celui indiqué par le raccourci. Logiquement, ce que je veux faire, c'est:

cd your-files-here.lnk

et finir où sur ce point. Ce que j'obtiens à la place, c'est:

Set-Location : Cannot find path 'your-files-here.lnk' because it does not exist.
At C:\Windows\system32\WindowsPowerShell\v1.0\Modules\pscx\Modules\CD\Pscx.CD.psm1:111 char:17
+                 Set-Location <<<<  $path -UseTransaction:$UseTransaction
    + CategoryInfo          : ObjectNotFound: (your-files-here.lnk:String) [Set-Location], ItemNotFoundException
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.SetLocationCommand

j'ai essayé

ii your-files-here.lnk

Mais cela ouvre une fenêtre d'explorateur au lieu de changer le répertoire courant.

Matthew Scouten
la source

Réponses:

6

Vous pouvez l'ajouter à votre Microsoft.PowerShell_profile.ps1fichier. La cdcommande fonctionnera alors comme vous le souhaitez.

remove-item alias:cd -force
function cd($target)
{
    if($target.EndsWith(".lnk"))
    {
        $sh = new-object -com wscript.shell
        $fullpath = resolve-path $target
        $targetpath = $sh.CreateShortcut($fullpath).TargetPath
        set-location $targetpath
    }
    else {
        set-location $target
    }
}
Kevin Panko
la source
J'ai dû changer "$ fullpath = chemin-de-résolution $ target" en "$ fullpath = (chemin-de-résolution $ target) .Path" pour le faire fonctionner.
Omaer du
2
De plus, j'ai remarqué que la saisie semi-automatique de PowerShell ne fonctionne pas pour les non-répertoires après avoir tapé "cd", ce qui signifie que je dois taper moi-même le nom complet du fichier .lnk.
Omaer
8

Malheureusement, Windows ne facilite pas l'utilisation des raccourcis. Cela devrait fonctionner:

$sh = New-Object -COM WScript.Shell
cd $sh.CreateShortcut('your-files-here.lnk').TargetPath
EBGreen
la source
Cela fonctionne lorsque la cible est un chemin local conventionnel, mais dans au moins un cas, le raccourci pointe vers un chemin UNC. Dans ce cas, TargetPath est vide.
Matthew Scouten
C'est étrange, j'ai des raccourcis .lnk vers les chemins UNC et la propriété .Targetpath contient le chemin. J'ai même essayé d'en prendre un et de rendre le chemin cible vide et cela ne serait pas sauvegardé de cette façon.
EBGreen
Ça ne fait rien. Je faisais autre chose de mal. Fonctionne bien.
Matthew Scouten
Vous devriez nous dire ce qui n'allait pas pour que les générations futures puissent en bénéficier!
uSlackr
1
En bref: CreateShortcut veut un chemin absolu.
Matthew Scouten
3

Le raccourci est-il une nécessité?

Vous pouvez utiliser un lien Windows pour cela. Voir mklink /?pour plus d'informations sur les liens / points de jonction Windows.

uSlackr
la source
Ce n'est pas moi qui ai décidé des raccourcis.
Matthew Scouten
1
Cette réponse m'a été extrêmement utile et la solution a fonctionné sans problème, même si elle ne résout pas techniquement le problème (de raccourci).
twigmac