我正在尝试将包含&符号的字符串传递给Invoke-Expression,它告诉我必须将它放在引号中并将其作为字符串传递。
我尝试了多种转义组合,并使用原始字符串和变量中的字符串组合“”和“”无效。我该怎么办?
以下是代码:
$streamout_calmedia01 = `
"rtmp://75.126.42.216/livepkgr/calmedialive01?adbe-live-event=liveevent&adbe-record-mode=record"
$streamcmd_calmedia01 = "C:\avconv\usr\bin\avconv.exe 'rtmp://75.126.42.211/transcoder/mobileingest live=1' -f flv -c:v libx264 -r 30 -g 120 -b:v 410000 -c:a aac -ar 22050 -b:a 64000 -strict experimental -y $streamout_calmedia01"
Invoke-Expression "$streamcmd_calmedia01"
我尝试在&符号之前使用`
并在放入变量之前在Invoke-Expression前面使用双引号,
我已经尝试过(如图所示)在变量周围加上-Command
用于Invoke-Expression并且放置'&'和“&”并将&符连接到字符串。
我需要在那里使用&符号,以便Flash Media Server从流名称中解析出命令,并在开始HTTP实时流式传输分块之前刷新之前记录的数据。
答案 0 :(得分:17)
&符号必须在字符串"&"
内双引号,因此您需要转义内部双引号
$streamout_calmedia01 = "rtmp://...vent`"&`"adbe-record-mode=record"
或将字符串放在单引号中
$streamout_calmedia01 = 'rtmp://...vent"&"adbe-record-mode=record'
答案 1 :(得分:1)
将$ streamout_calmedia01更改为:
$streamout_calmedia01 = "rtmp://75.126.42.216/livepkgr/calmedialive01?adbe-live-event=liveevent```&adbe-record-mode=record"
然后你必须重新分配$ streamout_calmedia1(使用$ streamout_calmedia1的新值),它应该可以工作。
答案 2 :(得分:1)
您根本不需要使用Invoke-Expression
。避免使用它将排除这个问题。只需直接调用EXE文件工具:
$streamout_calmedia01 = "rtmp://75.126.42.216/livepkgr/calmedialive01?adbe-live-event=liveevent&adbe-record-mode=record"
C:\avconv\usr\bin\avconv.exe 'rtmp://75.126.42.211/transcoder/mobileingest live=1' -f flv -c:v libx264 -r 30 -g 120 -b:v 410000 -c:a aac -ar 22050 -b:a 64000 -strict experimental -y $streamout_calmedia01
这可以避免双重逃逸的所有复杂情况,并且应该按照您的意图行事。