【发布时间】:2021-11-25 15:09:06
【问题描述】:
我正在尝试在 Windows 上使用 proc_open() 将字符串从 php 传递给批处理文件。除非我传递的字符串是多行的,否则它工作正常,因为它用换行符打破了命令。我尝试了各种转义方法,但似乎都不起作用:
cmd 样式 - 打印转义符号并换行:
proc_open('script.bat -m "this is ^\n multiline"', $desc, $pipes)
另一个尝试 - 打印整个字符串:
proc_open('script.bat -m "this is ^\\n multiline"', $desc, $pipes)
powershell 样式 - 打印整个字符串:
proc_open('script.bat -m "this is `n multiline"', $desc, $pipes)
无论我尝试什么,它要么打破字符串,要么按原样打印,没有换行符。
我错过了什么或做错了什么?如何通过proc_open() 获取多行参数?
【问题讨论】:
-
看起来你在 " 之前的 " 之后缺少一个撇号 - ' ,因此例如第一个应该是: proc_open('script.bat -m "this is ^\n multiline"', $desc, $pipes); 您在所有尝试中都打开了一个撇号 ' 字符串,但没有关闭它....
-
@Shlomtzion 对不起,我在尝试重现问题时出错了。我编辑了这个问题。但是它与问题的重点无关,因为我在实际脚本中很好。
-
在 powershell 示例中,您不会错过 ' - 撇号 ...这可能就是它在那里工作的原因....
-
@Shlomtzion 我的实际脚本中有结束撇号。这只是我为了这个问题而写一个例子时的错误。
-
嗯,这听起来像是 urlencode 可以解决的问题,有一种方法可以在批处理文件中对字符串进行 urldecode ......我真的在这里吐球 :) 我不知道它是否会工作。但如果你想尝试:stackoverflow.com/questions/28221685/urldecode-in-batch-file
标签: php powershell batch-file cmd newline