Powershell Add-Content -Value具有多个参数

时间:2014-01-09 12:08:04

标签: powershell parameters quoting

好的,有人建议我开始一个新问题,因为我原来的问题已经解决,但我还有另一个问题属于我之前的问题。

我的第一个问题是我想用双引号在txt文件中写文本。那就解决了。我的下一个问题是如何使用Add-Content -Value中的多个参数?

以下是一个例子:

Add-Content -Value '"C:\Program Files (x86)\Fraunhofer IIS\easyDCP Creator+\bin\easyDCP Creator+.exe" "-i C:\Users\Administrator\Desktop\dcp_bearbeitet\$title\$title.txt" "-o" "C:\Users\Administrator\Desktop\output_dcp\$title"'

在这种情况下,参数$ title代表我正在处理的视频片段的标题,当我正在处理它时我不知道标题,这就是我使用此参数的原因。但是当我运行我的脚本时,power-shell完全忽略了我的参数。所以我在参数周围用单引号再次尝试了它,例如:

... "-i C:\Users\Administrator\Desktop\dcp_bearbeitet\'$title'\'$title'.txt" ...

然后power-shell甚至不执行我的脚本。那么也许有人知道我如何处理Add-Content -Value中的参数?

2 个答案:

答案 0 :(得分:0)

您有两个相互竞争的要求:

  • 您想要将变量替换为您正在构建的命令,因此您需要使用双引号
  • 你想在输出中包含双引号,所以你要么必须转义它们,要么在字符串周围使用单引号。

一种方法是使用here-string,即@“...”@来分隔字符串而不是仅使用普通引号:

$value = @"
"C:\Program Files (x86)\Fraunhofer IIS\easyDCP Creator+\bin\easyDCP Creator+.exe" -i "C:\Users\Administrator\Desktop\dcp_bearbeitet\$title\$title.txt" -o "C:\Users\Administrator\Desktop\output_dcp\$title"
"@
Add-Content -Value $value

这对你有用。我将它从Add-Content中分离出来并不是因为它不会就地工作,而是因为一次做一件事情的混淆的可能性较小。此外,如果您单独构建值,则可以添加临时Write-Host $value以快速检查您是否具有完全符合您想要的字符串。

另一种方法是简单地转义所附的引号:

$value = "`"C:\Program Files (x86)\Fraunhofer IIS\easyDCP Creator+\bin\easyDCP Creator+.exe`" -i `"C:\Users\Administrator\Desktop\dcp_bearbeitet\$title\$title.txt`" -o `"C:\Users\Administrator\Desktop\output_dcp\$title`""
Add-Content -Value $value

但这确实很混乱。

其他选项是在小块中构建字符串,或者在字符串中使用不同的字符而不是双引号,然后执行替换以将它们变成引号,但这些中的任何一个都很混乱。我会选择“here-string”解决方案。

答案 1 :(得分:0)

您可以将数组传递到Add-Content

$string_array = @(
    "`n",
    "line1",
    "line2",
    "line3",
    '"line4"',
    "li`"ne`"5"
)

$string_array | Add-Content file.ext

参数-Value也可以直接采用数组:

Add-Content -path cake.txt -value @('some "stuff"',"more `"backticked`" stuff","hello world")