Come posso seguire un collegamento di Windows in Power Shell?


11

Sto usando PowerShell e ho un collegamento alla mia directory di destinazione nella directory corrente. Voglio cambiare la directory corrente in quella indicata dal collegamento. Logicamente quello che voglio fare è:

cd your-files-here.lnk

e finisci dove sopra quel punto. Quello che ottengo invece è:

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

Provai

ii your-files-here.lnk

Ma questo apre una finestra di esplorazione invece di cambiare la directory corrente.

Risposte:


6

Puoi aggiungere questo al tuo Microsoft.PowerShell_profile.ps1file. Il cdcomando funzionerà quindi come desiderato.

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
    }
}

Ho dovuto cambiare "$ fullpath = resol-path $ target" in "$ fullpath = (resol-path $ target) .Path" per farlo funzionare.
Omaer,

2
Inoltre, ho notato che il completamento automatico di PowerShell non funziona per le non directory dopo aver digitato "cd", il che significa che devo digitare da solo l'intero nome del file .lnk.
Omaer,

8

Sfortunatamente, Windows non semplifica il lavoro con le scorciatoie. Questo dovrebbe funzionare:

$sh = New-Object -COM WScript.Shell
cd $sh.CreateShortcut('your-files-here.lnk').TargetPath

Funziona dove la destinazione è un percorso locale convenzionale, ma in almeno un caso, il collegamento punta a un percorso UNC. In questo caso, TargetPath è vuoto.
Matthew Scouten,

È strano, ho scorciatoie .lnk per i percorsi UNC e la proprietà .Targetpath ha il percorso in essa. Ho anche provato a prenderne uno e rendere vuoto il percorso target e non avrebbe salvato in quel modo.
EBGreen

Non importa. Stavo facendo qualcos'altro di sbagliato. Funziona bene.
Matthew Scouten,

Dovresti dirci cosa c'era che non andava, in modo che le generazioni future possano trarne beneficio!
uSlackr,

1
In breve: CreateShortcut vuole un percorso assoluto.
Matthew Scouten,

3

La scorciatoia è una necessità?

È possibile utilizzare un collegamento di Windows per questo. Per mklink /?ulteriori informazioni sui collegamenti / punti di giunzione di Windows, consultare.


Non sono io quello che ha deciso le scorciatoie.
Matthew Scouten,

1
Questa risposta mi è stata di enorme aiuto e la soluzione ha funzionato senza problemi, anche se tecnicamente non risolve il problema (scorciatoia).
ramoscello
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.