丢弃部分URL,同时将其从powershell传递到批处理

时间:2017-06-13 15:30:41

标签: php powershell batch-file

我有一些连接到我的服务器的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的代码)

1 个答案:

答案 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")将替换为   处理命令时的变量值。 ... 任何嵌入式   双引号可以使用重音符号`"进行转义   加倍(将"替换为""