2017-06-13 42 views
2

我有一些PowerShell连接到我的服务器,并返回一个地址传递给一个批处理文件。从powershell传递到批处理时丢失部分url

这个批处理文件是一个需求,因为它是一个HTA /批量混合,允许我为该项目运行创建的用户界面。该URL作为iframe源来传递,以从服务器加载一些结果。

我有一个变量$content在PowerShell中,它等于http://example.com/selectMultiple.php?choice=[{"id":51,"p":100},{"id":52,"p":94}](稍加修改,以保护我的服务器地址)

我然后启动该批处理文件,同时通过该$content变量像这样

"Launching $content" 
Start-Process "files\hybrid.bat" "$content" 

在批处理文件中,我有一些代码表明echo是传递给它的值。

set "link=%~1" 
echo %link% 

但是通过后,一些变量被修剪。这回声http://example.com/selectMultiple.php?choice - 这导致我相信有一些=符号正在打破字符串。

我试过在powershell和从我的服务器(PHP)urldecode方法,并没有解决这个问题。

我在这里损失将非常感激任何帮助解决这一issue./

(我标记PHP为好,证明我确实有被返回URL代码工作能力)

+0

你不能摆脱批处理文件,并直接用powershell做东西?你可以将文本转储到文件并在批处理文件中读取(作为解决方法)?你能保存文本到env变量并在批处理文件中读取它吗? – 4c74356b41

+0

@ 4c74356b41我无法摆脱批处理文件,我将其用作HTA/Batch Hybrid。网址正在被传递到基本打开HTA并加载一个带有URL的iframe。我可以将它转储到一个文件作为解决方法,但我觉得这将是一个较慢的方法,对于这个应用程序我需要尽可能快。 – GrumpyCrouton

+0

Windows命令提示符将'='-sign作为标记分隔符,就像空格一样;也许它在你的批处理文件中使用'set“link =%*”'时有帮助,因为你只传递链接...... – aschipfl

回答

3
Start-Process "files\hybrid.bat" """$content""" 

注意$content变量包含它们在批次脚本视作parameter delimiters字符(例如=,):

分隔符将下一个参数分开 - 它们将 命令行分成单词。

参数是最经常由空格分隔,但任何 以下也都是有效的分隔符:

  • 逗号(,)
  • 分号(;)
  • 等于(=)
  • Space()
  • Tab()

调用的批处理(请参见set "link=%~1"命令)以正确的方式从第一个提供的参数中除去双引号。因此,您需要传递来自$content变量enclosed in double quotes from powershell的字符串。使用一倍内双引号如下:

#        ↓   ↓ string delimiters are not supplied 
Start-Process "files\hybrid.bat" """$content""" 
#         ↑↑  ↑↑ escaped inner double quotes are supplied 

双引号字符串("

当你用双引号字符串,任何变量 名字符串中诸如"$myVar"会在处理命令时用 变量的值替换。 ... 任何嵌入式 双引号可以使用严重口音作为`"或 加倍(取代"""