2008-08-22 112 views
12

例如:在当前目录中有一个快捷方式sSomeProgram执行程序快捷方式

cmd.exe中,您可以键入s,它将启动该程序。

在PowerShell中,键入s给出:

The term 's' is not recognized as a cmdlet, function, operable program, or script file. Verify the term and try again.

如果键入s.lnkSomeProgram,它运行的程序就好了。

如何将PowerShell配置为像程序一样执行快捷方式?

回答

7

在我的Vista系统上键入S将不会启动lnk文件,除非我在列表中设置了带有.lnk的环境变量PATHEXT。当我做。 S将在cmd.exe中工作,我必须在PowerShell中执行\ S。

+1

cmd自动添加当前目录“。”。到你的PATH环境变量。 PowerShell认为这是一种安全风险,并强制您明确键入。\路径。 在linux中,你可以添加“。”到你的PATH环境变量来恢复“危险的”行为... – Jaykul 2008-09-16 01:41:22

+0

我想你也必须输入完整的文件名s.lnk,因为slipsec说 – Jaykul 2008-09-16 01:47:51

2

我不相信你可以。您可能会更好地使用您从配置文件脚本调用的脚本中的常用命令进行别名。

示例 -

设置锯齿NP C:\ WINDOWS \ NOTEPAD.EXE

然后你可以在命令行你的短,容易分型的名字。

0

您可以随时使用制表符完成键入“s [TAB]”,然后按ENTER键并执行它。

2

首先,快捷键不是“s”,它是“s.lnk”。例如。你是不是能够通过时的名称是“t.txt”键入“T”,打开一个文本文件(用记事本说):) Technet says

PATHEXT环境变量定义 检查的文件扩展名 列表通过Windows NT搜索 以查找可执行文件。 PATHEXT的默认值是.COM,.EXE; .BAT; .CMD

您可以通过其他此处描述的点源,或者您也可以使用调用字符“&”。这意味着PS会将您的字符串视为要执行的内容而不仅仅是文本。尽管这在脚本中可能更重要。

我想补充一点,你应该通过引号之外的任何参数(这一点在我之前)请注意,“-r”不在引用字符串中,只有exe。

& "C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe" -r | out-null 
5

加入;.LNKPATHEXT环境变量结束后,我现在可以执行快捷键,即使没有前面的./符号。 (谢谢bruceatk!)

我也受到Steven的建议的启发,创建一个小脚本,自动将我的PATH中的所有快捷方式都别名(尽管我打算坚持更简单的解决方案;)。

$env:path.Split(';') | 
    Get-ChildItem -filter *.lnk | 
    select @{ Name='Path'; Expression={ $_.FullName } }, 
     @{ Name='Name'; Expression={ [IO.Path]::GetFileNameWithoutExtension($_.Name) } } | 
    where { -not (Get-Alias $_.Name -ea 0) } | 
    foreach { Set-Alias $_.Name $_.Path } 
13

您还可以使用“invoke-item”cmdlet调用快捷方式。因此,举例来说,如果你想推出“互联网explorer.lnk”,您可以键入以下命令:

invoke-item 'Internet Explorer.lnk' 

或者你也可以使用别名

ii 'internet explorer.lnk' 

另一个很酷的事情是,你可以做“invoke-item t.txt”,它会自动打开* .txt文件的默认处理程序,例如记事本。

注意如果要在当前目录中执行应用程序app.exe,则必须实际指定要执行的相对路径或绝对路径。 “。\ app.exe”是您需要键入以执行应用程序的内容。