在powershell中使用参数为快捷方式创建带引号的路径

在powershell中使用参数为快捷方式创建带引号的路径,powershell,arguments,quotes,shortcuts,wsh,Powershell,Arguments,Quotes,Shortcuts,Wsh,我有以下调用WSHShell的powershell代码,它将在Win7/8的“开始”菜单中创建一个快捷方式,但我无法确定如何让powershell在目标行中的参数之前在UNC路径周围传递所需的引号 我想要什么: “\\UNCPATH1\Directory\application.exe”argumentA ArgumentB 我得到的: \\UNCPATH1\Directory\application.exe argumentA ArgumentB 当前使用的代码: $WshShell = Ne

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

我想要什么: “\\UNCPATH1\Directory\application.exe”argumentA ArgumentB

我得到的: \\UNCPATH1\Directory\application.exe argumentA ArgumentB

当前使用的代码:

$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()
用代码示例编辑。。。感谢MadTechnician和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()


在第二个示例中,请注意UNC路径中的空格以及快捷方式属性中workingdirectory中单引号的删除。(windows将自动添加到此处)

将带引号的字符串放在其他引号内,这样
“\\UNCPATH1\Directory\application.exe”
将变成
“\\UNCPATH1\Directory\application.exe”

编辑:…我错了。这适用于
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”
。勾号不会强制在无空格的路径上加引号。正在寻找在快捷方式的“目标”字段中强制引用的方法。如果UNC路径中有空格,则MadTechnician的语法正确。不管UNC路径中是否有空格,代码的功能都与“start in”的语法相同。@TheotherItGuy对我来说,引号保留为有空格或无空格的路径。我可能没有理解您所说的“强制引用”是什么意思。当我使用上面的内容时:$Shortcut.TargetPath=“
”\\UNCPATH1\Directory\application.exe
“我获取\\UNCPATH1\Directory\application.exe argumentA ArgumentB我正在尝试获取:“\\UNCPATH1\Directory\application.exe”argumentA ArgumentB位于所创建快捷方式的目标字段中。如果UNC路径中有空格,则发布的代码将在目标应用程序路径周围添加引号。如果没有空格,则没有引号。好的,只是尝试了一点手动编辑路径,当我将引号手动添加到一个没有空格的UNC路径时,单击“应用”会将其剥离。看起来Windows会在不需要的情况下从目标路径中删除引号,即使在创建时显式调用引号也是如此。我已经设法解决了相反的问题。我在设置TargetPath时不包括引号,但它们会添加到生成的快捷方式中。
$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()
$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()
$Shortcut.TargetPath = "`"\\UNCPATH1\Directory\application.exe`""