Como posso seguir um atalho do Windows no Power Shell?

9

Estou usando o PowerShell e tenho um atalho para o diretório de destino no diretório atual. Quero alterar o diretório atual para o apontado pelo atalho. Logicamente, o que eu quero fazer é:

cd your-files-here.lnk

e acabar onde acima desses pontos. O que eu recebo é:

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

eu tentei

ii your-files-here.lnk

Mas isso abre uma janela do explorador em vez de alterar o diretório atual.

Matthew Scouten
fonte

Respostas:

6

Você pode adicionar isso ao seu Microsoft.PowerShell_profile.ps1arquivo. O cdcomando funcionará como desejado.

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
fonte
Eu tive que mudar "$ fullpath = resolve-path $ target" para "$ fullpath = (resolve-path $ target) .Path" para fazê-lo funcionar.
Omaer
1
Além disso, notei que o preenchimento automático do PowerShell não funciona para não-diretórios após digitar "cd", o que significa que preciso digitar o nome inteiro do arquivo .lnk.
Omaer
8

Infelizmente, o Windows não facilita o trabalho com atalhos. Isso deve funcionar:

$sh = New-Object -COM WScript.Shell
cd $sh.CreateShortcut('your-files-here.lnk').TargetPath
EBGreen
fonte
Isso funciona onde o destino é um caminho local convencional, mas em pelo menos um caso, o atalho está apontando para um caminho UNC. Nesse caso, o TargetPath está vazio.
Matthew Scouten
Isso é estranho, eu tenho atalhos .lnk para caminhos UNC e a propriedade .Targetpath possui o caminho. Eu até tentei pegar um e deixar o caminho de destino vazio e não salvaria dessa maneira.
EBGreen 23/02
Deixa pra lá. Eu estava fazendo outra coisa errada. Funciona bem.
Matthew Scouten
Você deve nos dizer o que estava errado para que as gerações futuras possam se beneficiar!
uSlackr
1
Em resumo: CreateShortcut deseja um caminho absoluto.
Matthew Scouten
3

O atalho é uma necessidade?

Você pode usar um link do Windows para isso. Consulte mklink /?para obter mais informações sobre links / pontos de junção do Windows.

uSlackr
fonte
Não sou eu quem decidiu os atalhos.
Matthew Scouten
1
Essa resposta foi extremamente útil para mim e a solução funcionou sem problemas, caso tecnicamente não resolva o problema (atalho).
Twigmac #