转义批处理文件发出的powershell命令中的引号
Escaping quotes in powershell command issued by batch file
我一直在尝试获取一个 PowerShell 命令来创建一个在批处理文件中工作的快捷方式,但无法让它真正将我需要的引号放入快捷方式中。我在其他批处理文件中使用这个命令很好,但引号搞砸了。我试过 "", """, """", ", ", \
", `" 和几乎所有我能想到的变体,但没有任何效果。我需要这样的快捷方式:
"C:\Program Files\OpenVPN\bin\openvpn-gui.exe" --connect "mullvad.ovpn"
这就是我一直在尝试的方法,当然还有很多变化:
powershell "$s=(New-Object -COM WScript.Shell).CreateShortcut('C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp\OpenVPN GUI.lnk');$s.TargetPath='"C:\Program Files\OpenVPN\bin\openvpn-gui .exe" --connect "mullvad.ovpn"';$s.Save()"
但它要么只是为此创建了一个快捷方式:
"C:\Program Files\OpenVPN\bin\openvpn-gui.exe --connect mullvad_us_chi.ovpn"
或者,更常见的是,它出错是因为我的各种尝试的语法错误。那么,如何让 PowerShell 执行我在这里想要执行的操作?
您的主要问题是您没有正确创建快捷方式。
为此,您应该首先使用一个额外的 属性。您的 TargetPath
应该是可执行文件,其余的是 Arguments
:
那么你的命令应该看起来更像这样:
"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -NoLogo -NoProfile -Command "$s = (New-Object -COM WScript.Shell).CreateShortcut(\"C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp\OpenVPN GUI.lnk\");$s.TargetPath=\"C:\Program Files\OpenVPN\bin\openvpn-gui.exe\";$s.Arguments=\"--connect `\"mullvad.ovpn`\"\";$s.Save()"
我很少使用单引号,但如果您喜欢它们,那么也许这也适合您:
"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -NoLogo -NoProfile -Command "$s = (New-Object -COM WScript.Shell).CreateShortcut('C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp\OpenVPN GUI.lnk');$s.TargetPath='C:\Program Files\OpenVPN\bin\openvpn-gui.exe';$s.Arguments='--connect \"mullvad.ovpn\"';$s.Save()"
我一直在尝试获取一个 PowerShell 命令来创建一个在批处理文件中工作的快捷方式,但无法让它真正将我需要的引号放入快捷方式中。我在其他批处理文件中使用这个命令很好,但引号搞砸了。我试过 "", """, """", ", ", \
", `" 和几乎所有我能想到的变体,但没有任何效果。我需要这样的快捷方式:
"C:\Program Files\OpenVPN\bin\openvpn-gui.exe" --connect "mullvad.ovpn"
这就是我一直在尝试的方法,当然还有很多变化:
powershell "$s=(New-Object -COM WScript.Shell).CreateShortcut('C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp\OpenVPN GUI.lnk');$s.TargetPath='"C:\Program Files\OpenVPN\bin\openvpn-gui .exe" --connect "mullvad.ovpn"';$s.Save()"
但它要么只是为此创建了一个快捷方式:
"C:\Program Files\OpenVPN\bin\openvpn-gui.exe --connect mullvad_us_chi.ovpn"
或者,更常见的是,它出错是因为我的各种尝试的语法错误。那么,如何让 PowerShell 执行我在这里想要执行的操作?
您的主要问题是您没有正确创建快捷方式。
为此,您应该首先使用一个额外的 属性。您的 TargetPath
应该是可执行文件,其余的是 Arguments
:
那么你的命令应该看起来更像这样:
"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -NoLogo -NoProfile -Command "$s = (New-Object -COM WScript.Shell).CreateShortcut(\"C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp\OpenVPN GUI.lnk\");$s.TargetPath=\"C:\Program Files\OpenVPN\bin\openvpn-gui.exe\";$s.Arguments=\"--connect `\"mullvad.ovpn`\"\";$s.Save()"
我很少使用单引号,但如果您喜欢它们,那么也许这也适合您:
"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -NoLogo -NoProfile -Command "$s = (New-Object -COM WScript.Shell).CreateShortcut('C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp\OpenVPN GUI.lnk');$s.TargetPath='C:\Program Files\OpenVPN\bin\openvpn-gui.exe';$s.Arguments='--connect \"mullvad.ovpn\"';$s.Save()"