我有一些连接到我的服务器的powershell并返回一个要传递给批处理文件的地址。
此批处理文件是一项要求,因为它是HTA / Batch Hybrid,允许我为项目运行创建的UI。该URL将作为iframe源传递,以从服务器加载一些结果。
我在powershell中有一个变量$content
,等于http://example.com/selectMultiple.php?choice=[{"id":51,"p":100},{"id":52,"p":94}]
(略微修改以保护我的服务器地址)
然后我启动批处理文件,同时将$content
变量传递给它,就像这样
"Launching $content"
Start-Process "files\hybrid.bat" "$content"
在批处理文件中,我有一些代码可以回显传递给它的值。
set "link=%~1"
echo %link%
但是在传递之后,一些变量被修剪掉了。这个回声http://example.com/selectMultiple.php?choice
- 让我相信有=
符号的东西正在破坏字符串。
我在powershell和我的服务器(php)中尝试过urldecode方法,但都没有解决问题。
我在这里感到茫然,非常感谢任何帮助解决这个问题./
(我也标记了PHP,以表明我有能力处理返回URL的代码)
答案 0 :(得分: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"
)将替换为 处理命令时的变量值。 ... 任何嵌入式 双引号可以使用重音符号`"
进行转义 加倍(将"
替换为""
)。