【问题标题】:creating quoted path for shortcut with arguments in powershell在powershell中为带有参数的快捷方式创建带引号的路径
【发布时间】:2015-10-27 05:06:06
【问题描述】:

我有以下调用 WSHShell 的 powershell 代码,它将在 Win7/8 的开始菜单中创建一个快捷方式,但我无法弄清楚如何让 powershell 在目标中的参数之前在 UNC 路径周围传递所需的引号行。

我想要什么: "\\UNCPATH1\Directory\application.exe" 参数A 参数B

我得到了什么: \\UNCPATH1\Directory\application.exe 参数A 参数B

目前使用的代码:

$WshShell = New-Object -comObject WScript.Shell
$Shortcut = $WshShell.CreateShortcut("$env:ProgramData\Microsoft\Windows\Start Menu\Programs\supercoolprogram\mrincredible.lnk")
$Shortcut.TargetPath = "\\UNCPATH1\Directory\application.exe"
$Shortcut.Arguments = "argumentA ArgumentB"
$Shortcut.WorkingDirectory = "\\UNCPATH1\Directory"
$Shortcut.Save()

使用代码示例进行编辑...感谢 TheMadTechnician 和 Speerian,他们都有工作示例。 Windows 正在从应用程序 UNC 路径中没有空格的快捷方式中去除目标字段中的引用路径。这两个代码示例都适用于带有空格的路径。

$WshShell = New-Object -comObject WScript.Shell
$Shortcut = $WshShell.CreateShortcut("$env:ProgramData\Microsoft\Windows\Start Menu\Programs\supercoolprogram\mrincredible.lnk")
$Shortcut.TargetPath = "`"\\UNCPATH1\Directory1\application.exe`""
$Shortcut.Arguments = "argumentA ArgumentB"
$Shortcut.WorkingDirectory = '"\\UNCPATH1\Directory1"'
$Shortcut.Save()

$WshShell = New-Object -comObject WScript.Shell
$Shortcut = $WshShell.CreateShortcut("$env:ProgramData\Microsoft\Windows\Start Menu\Programs\supercoolprogram\mrincredible.lnk")
$Shortcut.TargetPath = """\\UNCPATH1\Directory 1\application.exe"""
$Shortcut.Arguments = "argumentA ArgumentB"
$Shortcut.WorkingDirectory = "\\UNCPATH1\Directory 1"
$Shortcut.Save()

在第二个示例中,请注意 UNC 路径中的空格以及从快捷方式属性中的工作目录中删除的单引号。 (windows会自动添加到这里)

【问题讨论】:

  • 我设法遇到了相反的问题。我在设置 TargetPath 时不包含引号,但它们会添加到生成的快捷方式中。

标签: powershell arguments quotes shortcuts wsh


【解决方案1】:

将您引用的字符串放在其他引号中,这样"\\UNCPATH1\Directory\application.exe" 将变为'"\\UNCPATH1\Directory\application.exe"'

$WshShell = New-Object -comObject WScript.Shell
$Shortcut = $WshShell.CreateShortcut("$env:ProgramData\Microsoft\Windows\Start Menu\Programs\supercoolprogram\mrincredible.lnk")
$Shortcut.TargetPath = '"\\UNCPATH1\Directory\application.exe"'
$Shortcut.Arguments = "argumentA ArgumentB"
$Shortcut.WorkingDirectory = '"\\UNCPATH1\Directory"'
$Shortcut.Save()

编辑: ...我错了。这适用于 WorkingDirectory 属性,但不适用于 TargetPath 属性。 的作用 是用三重引号代替你的字符串。所以,这导致我们这样做:

$WshShell = New-Object -comObject WScript.Shell
$Shortcut = $WshShell.CreateShortcut("$([environment]::GetFolderPath("Desktop"))\mrincredible.lnk")
$Shortcut.TargetPath = """\\UNCPATH1\Directory 1\application.exe"""
$Shortcut.Arguments = "argumentA ArgumentB"
$Shortcut.WorkingDirectory = '"\\UNCPATH1\Directory"'
$Shortcut.Save()

至少在 Windows 8.1 上运行良好。

【讨论】:

  • 这适用于在字段开头提供引号,但是,目标字段仍然显示:\\UNCPATH1\Directory\application.exe argumentA ArgumentB 到达那里...我尝试了双引号和三引号, 用单引号括起来,无法正确格式化目标。
  • 您使用的路径是否需要引号?如果没有,则不会应用它们。
  • 有趣。我修改了目标路径,因此从路径开始以包含一个空格,它确实在应用程序周围添加了引号。如果没有明确要求,没有办法让它通过那些?另外,值得注意的是,如果需要,工作目录将自动完成到带引号的路径。如上所述,快捷方式中路径的开头将有双引号。将发布更新的代码以跟进原始代码。
  • 或使用撇号:$Shortcut.TargetPath = '"\\UNCPATH1\Directory 1\application.exe"'.
【解决方案2】:

您可以使用 ` 转义引号。它是“~”键上的另一个符号。

$Shortcut.TargetPath = "`"\\UNCPATH1\Directory\application.exe`""

【讨论】:

  • 勾号不会强制在无间距路径上使用引号。寻找一种在快捷方式的“目标”字段中强制引用的方法。如果 UNC 路径中有空格,则 TheMadTechnician 具有正确的语法。并且无论 UNC 路径中的间距如何,都使用他的语法为“开始”发布的代码功能。
  • @thatotheritguy 对我来说,引号保留有空格或不空格的路径。我可能错过了“强制引用”的意思。
  • 当我使用上面的内容时: $Shortcut.TargetPath = ""\\UNCPATH1\Directory\application.exe"" 我得到 \\UNCPATH1\Directory\application.exe 参数A ArgumentB 我想得到:"\\UNCPATH1 \Directory\application.exe" argumentA ArgumentB 在创建的快捷方式的目标字段中。如果 UNC 路径中有空格,则发布的代码将在目标应用程序路径周围添加引号。如果没有空格,则没有引号。
  • 好的,只是尝试了一点手动编辑路径,当我手动将引号添加到没有空格的 UNC 路径时,单击应用时它们会被剥离。如果不需要,Windows 似乎会从目标路径中去除引号,即使在创建时明确调用它们也是如此。
猜你喜欢
  • 2021-03-09
  • 1970-01-01
  • 2021-08-25
  • 2013-09-14
  • 2013-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多