Bagaimana saya bisa mengikuti pintasan windows di PowerShell?

9

Saya menggunakan PowerShell dan saya memiliki jalan pintas ke direktori tujuan saya di direktori saat ini. Saya ingin mengubah direktori saat ini ke yang ditunjuk oleh pintasan. Secara logis yang ingin saya lakukan adalah:

cd your-files-here.lnk

dan berakhir di mana lebih dari titik itu. Apa yang saya dapatkan adalah:

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

Saya mencoba

ii your-files-here.lnk

Tapi ini membuka jendela explorer alih-alih mengubah direktori saat ini.

Matthew Scouten
sumber

Jawaban:

5

Anda dapat menambahkan ini ke Microsoft.PowerShell_profile.ps1 mengajukan. Itu cd perintah kemudian akan berfungsi seperti yang diinginkan.

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
sumber
Saya harus mengubah "$ fullpath = resolve-path $ target" menjadi "$ fullpath = (teken-path $ target) .Path" untuk membuatnya berfungsi.
Omaer
Juga, saya perhatikan bahwa PowerShell auto-complete tidak berfungsi untuk non-direktori setelah saya mengetik "cd", yang berarti saya harus mengetikkan seluruh nama file .lnk sendiri.
Omaer
8

Sayangnya, Windows tidak membuatnya mudah untuk bekerja dengan cara pintas. Ini seharusnya bekerja:

$sh = New-Object -COM WScript.Shell
cd $sh.CreateShortcut('your-files-here.lnk').TargetPath
EBGreen
sumber
Ini berfungsi di mana target adalah jalur lokal konvensional, tetapi setidaknya dalam satu kasus, jalan pintas menunjuk ke jalur UNC. Dalam hal ini, TargetPath kosong.
Matthew Scouten
Itu aneh, saya punya. Lnk pintasan ke jalur UNC dan properti. Targetpath memiliki jalur di dalamnya. Saya bahkan mencoba mengambil satu dan membuat targetpath kosong dan itu tidak akan menyelamatkan seperti itu.
EBGreen
Sudahlah. Saya melakukan sesuatu yang salah. Bekerja dengan baik.
Matthew Scouten
Anda harus memberi tahu kami apa yang salah sehingga generasi masa depan dapat memperoleh manfaat!
uSlackr
1
Singkatnya: CreateShortcut menginginkan jalur absolut.
Matthew Scouten
3

Apakah jalan pintas itu suatu keharusan?

Anda dapat menggunakan tautan Windows untuk ini. Lihat mklink /? untuk informasi lebih lanjut tentang tautan Windows / titik persimpangan.

uSlackr
sumber
Saya bukan orang yang memutuskan jalan pintas.
Matthew Scouten
1
Jawaban ini sangat membantu saya dan solusinya bekerja dengan lancar, bahkan jika secara teknis tidak menyelesaikan masalah (pintasan).
twigmac