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.