7

我正在尝试将带有与号的字符串的变量传递给 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"

在输入变量之前,我尝试`在 & 符号前使用 a 并在 Invoke-Expression 前使用双引号,

我已经尝试(如图所示)使用 for Invoke-Expression 在变量周围加上引号,-Command并且还加上 '&' 和 "&" 并将 & 符号连接到字符串。

我需要其中的 & 符号,以便 Flash Media Server 从流名称中解析命令并在开始 HTTP 实时流分块之前刷新先前记录的数据。

4

3 回答 3

20

和号必须在 string"&"用双引号引起来,所以你需要转义内部的双引号

$streamout_calmedia01 = "rtmp://...vent`"&`"adbe-record-mode=record"

或将字符串放在单引号中

$streamout_calmedia01 = 'rtmp://...vent"&"adbe-record-mode=record'
于 2012-09-15T17:55:00.200 回答
1

将 $streamout_calmedia01 更改为:

$streamout_calmedia01 = "rtmp://75.126.42.216/livepkgr/calmedialive01?adbe-live-event=liveevent```&adbe-record-mode=record"

然后,您必须重新分配 $streamout_calmedia1(使用 $streamout_calmedia1 的新值),它应该可以工作。

于 2012-09-15T17:53:43.287 回答
0

你根本不需要使用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

这避免了双重转义的所有复杂性,并且应该按照您的意图进行。

于 2012-09-15T20:43:28.550 回答