在 Windows 上将 \r\n 插入参数

在 Windows 上将 \r\n 插入参数

我在 Windows 上使用 FFmpeg,需要\r\n在参数本身中插入一个。

ffmpeg … -headers "X-Test: Test\r\nX-Test-2: Test 2\r\n" …

虽然这在 Linux 等环境下可以正常工作,但在普通的 Windows 10 命令提示符下却无法正常工作。在 Windows 下的 Bash 下也无法正常工作。在这两种情况下,\r\n都会发送文字(反斜杠、r、反斜杠、n 个字符)。

我尝试使用Alt++ ,虽然这似乎插入了字符,但它们被 FFmpeg 解释13 Alt为。100xE299AA 0xE29799

这个问题类似于如何在 cmd.exe 命令中插入新行?,但我并不依赖于 cmd.exe。如果有任何建议,我很乐意使用任何 shell,只要我可以在 Windows 下使用它。这可以通过 Powershell 以某种方式实现吗?或者,也许可以将我的参数放在文本文件中并将其作为参数值引入?

答案1

在 PowerShell 中,你可以使用反引号-r-反引号-nr并使用反引号代替命令部分n之前的反斜杠 -CRLF反引号“r” 反引号“n”

这只需要对现有命令进行这样的更改

ffmpeg … -headers "X-Test: Test`r`nX-Test-2: Test 2`r`n"

更多资源

  • 转义符、分隔符和引号

    Special characters
    
      Special characters are used to format/position string output.
    
      `r`n  Carriage return + New line
    
  • 反引号键

    在此处输入图片描述

答案2

Bash 有$'…'这样的语法。无论什么操作系统,它都应该能工作。

ffmpeg … -headers $'X-Test: Test\r\nX-Test-2: Test 2\r\n' …

Bash 参考手册

形式的单词$'string'将受到特殊处理。单词将扩展为string,并按照 ANSI C 标准的规定替换反斜杠转义字符。如果存在反斜杠转义序列,则按如下方式解码:

[…]

\n
新队

\r
回车

[…]

答案3

纯批处理解决方案。当然比 powershell 差很多,所以仅供参考

setlocal EnableExtensions EnableDelayedExpansion

rem Get CR and LF characters
for /f %%a in ('copy /Z "%~dpf0" nul') do set "CR=%%a"

(set LF=^
%=EMPTY=%
)

ffmpeg … -headers "X-Test: Test!CR!!LF!X-Test-2: Test 2!CR!!LF!" …

然而,你不太可能真正需要 CR 字符,因为 C 库会'\n'在输入/输出时自动在 和 本机换行符之间进行转换,所以你只需要使用 LF

相关内容