如何在Power Shell中遵循Windows快捷方式?


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

但这会打开资源管理器窗口,而不是更改当前目录。

Answers:


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 = resolve-path $ target”更改为“ $ fullpath =(resolve-path $ target).Path”以使其正常工作。
Omaer

2
另外,我注意到在键入“ cd”后,PowerShell自动完成功能不适用于非目录,这意味着我必须自己输入.lnk文件的全名。
奥马尔

8

不幸的是,Windows并不容易使用快捷方式。这应该工作:

$sh = New-Object -COM WScript.Shell
cd $sh.CreateShortcut('your-files-here.lnk').TargetPath

这在目标是常规本地路径的情况下起作用,但是在至少一种情况下,快捷方式指向UNC路径。在这种情况下,TargetPath为空。
马修·斯科腾

奇怪,我有.lnk指向UNC路径的快捷方式,而.Targetpath属性中有路径。我什至尝试将其中一个设置为空并将targetpath设为空,这样就无法保存。
EBGreen '02

没关系。我做错了其他事。工作良好。
马修·斯科腾

您应该告诉我们哪里出了问题,这样子孙后代才能受益!
uSlackr 2012年

1
简而言之:CreateShortcut需要绝对路径。
马修·斯科腾

3

捷径是必须的吗?

您可以为此使用Windows链接。有关mklink /?Windows链接/连接点的更多信息,请参见。


我不是决定快捷方式的人。
马修·斯科腾

1
这个答案对我非常有帮助,并且该解决方案可以顺利运行,如果它在技术上不能解决(快捷方式)问题。
twigmac '16
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.