Jak postępować zgodnie ze skrótem systemu Windows w powłoce zasilania?

11

Korzystam z programu PowerShell i mam skrót do katalogu docelowego w bieżącym katalogu. Chcę zmienić bieżący katalog na wskazany przez skrót. Logicznie chcę to zrobić:

cd your-files-here.lnk

i skończy się tam, gdzie nad tymi punktami. Zamiast tego otrzymuję:

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

próbowałem

ii your-files-here.lnk

Ale to otwiera okno eksploratora zamiast zmiany bieżącego katalogu.

Matthew Scouten
źródło

Odpowiedzi:

6

Możesz dodać to do swojego Microsoft.PowerShell_profile.ps1pliku. cdPolecenie następnie pracować zgodnie z zapotrzebowaniem.

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
źródło
Musiałem zmienić „$ fullpath = resol-path $ target” na „$ fullpath = (resol-path $ target) .Path”, aby to działało.
Omaer
2
Zauważyłem również, że automatyczne uzupełnianie programu PowerShell nie działa w przypadku katalogów niebędących katalogami po wpisaniu „cd”, co oznacza, że ​​muszę sam wpisać całą nazwę pliku .lnk.
Omaer,
8

Niestety system Windows nie ułatwia pracy ze skrótami. To powinno działać:

$sh = New-Object -COM WScript.Shell
cd $sh.CreateShortcut('your-files-here.lnk').TargetPath
EBGreen
źródło
Działa to tam, gdzie cel jest konwencjonalną ścieżką lokalną, ale w co najmniej jednym przypadku skrót wskazuje ścieżkę UNC. W takim przypadku ścieżka docelowa jest pusta.
Matthew Scouten
To dziwne, mam skróty .lnk do ścieżek UNC, a właściwość .Targetpath zawiera w sobie ścieżkę. Próbowałem nawet wziąć jedną i opróżnić ścieżkę celu, a to by tego nie uratowało.
EBGreen,
Nieważne. Robiłem coś innego źle. Działa w porządku.
Matthew Scouten
Powinieneś nam powiedzieć, co było nie tak, aby przyszłe pokolenia mogły skorzystać!
uSlackr
1
W skrócie: CreateShortcut chce ścieżki bezwzględnej.
Matthew Scouten
3

Czy skrót jest koniecznością?

Możesz do tego użyć linku Windows. Zobacz mklink /?więcej informacji na temat linków / punktów połączenia systemu Windows.

uSlackr
źródło
Nie jestem tym, który zdecydował się na skróty.
Matthew Scouten
1
Ta odpowiedź była dla mnie niezwykle pomocna, a rozwiązanie działało sprawnie, nawet jeśli technicznie nie rozwiąże problemu (skrótu).
twigmac