Как я могу следовать за ярлыком Windows в Power Shell?

11

Я использую PowerShell, и у меня есть ярлык для моего каталога назначения в текущем каталоге. Я хочу изменить текущий каталог на тот, на который указывает ярлык. Логично, что я хочу сделать, это:

cd your-files-here.lnk

и оказаться там, где над этими точками. Вместо этого я получаю:

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

Я старался

ii your-files-here.lnk

Но это открывает окно обозревателя вместо изменения текущего каталога.

Мэтью Скотен
источник

Ответы:

6

Вы можете добавить это в свой Microsoft.PowerShell_profile.ps1файл. Затем cdкоманда будет работать как нужно.

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
    }
}
Кевин Панко
источник
Мне пришлось изменить «$ fullpath = resol-path $ target» на «$ fullpath = (resol-path $ target) .Path», чтобы заставить его работать.
Омар
2
Кроме того, я заметил, что автозаполнение PowerShell не работает для не-каталогов после того, как я ввожу «cd», что означает, что я должен сам ввести полное имя файла .lnk.
Омаер
8

К сожалению, Windows не облегчает работу с ярлыками. Это должно работать:

$sh = New-Object -COM WScript.Shell
cd $sh.CreateShortcut('your-files-here.lnk').TargetPath
EBGreen
источник
Это работает, когда целью является обычный локальный путь, но по крайней мере в одном случае ярлык указывает на путь UNC. В этом случае TargetPath пуст.
Мэтью Скотен
Это странно, у меня есть ярлыки .lnk для путей UNC, и свойство .Targetpath содержит путь в нем. Я даже попытался взять один и сделать целевой путь пустым, и это не спасло бы таким образом.
EBGreen
Ничего. Я делал что-то еще не так. Работает отлично.
Мэтью Скотен
Вы должны сказать нам, что было не так, чтобы будущие поколения могли получить пользу!
uSlackr
1
Вкратце: CreateShortcut хочет абсолютный путь.
Мэтью Скотен
3

Является ли ярлык необходимостью?

Вы можете использовать ссылку Windows для этого. См. mklink /?Для получения дополнительной информации о связях / точках соединения Windows.

uSlackr
источник
Я не тот, кто выбрал ярлыки.
Мэтью Скотен
1
Этот ответ был чрезвычайно полезен для меня, и решение работало гладко, даже если оно технически не решает проблему (ярлык).
Twigmac