web-dev-qa-db-ja.com

Windowsのパラメータに\ r \ nを挿入する

WindowsでFFmpegを使用していて、パラメーター自体に\r\nを挿入する必要があります。

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

これはLinuxなどでは正常に機能しますが、通常のWindows10コマンドプロンプトでは機能しません。また、WindowsのBashでは機能しません。どちらの場合も、リテラル\r\n(バックスラッシュ、r、バックスラッシュ、n文字)がで送信されます。

使ってみました Alt+13Alt+10、そしてこれは文字を挿入するように見えましたが、FFmpegによって0xE299AA 0xE29799として解釈されました。

この質問は cmd.exeコマンドに新しい行を挿入するにはどうすればよいですか? に似ていますが、cmd.exeに縛られていない点が異なります。何か提案があれば、Windowsで使用できる限り、どのシェルでも使用できます。これはどういうわけかPowershell経由で可能ですか?または、パラメータをテキストファイルに入れて、パラメータ値として取り込むことでしょうか。

1
Brad

PowerShellでは、次を使用できます backtick-r-backtick-n コマンドのr部分のnCRLFの前のバックスラッシュの代わりにバッククォートを使用します—backtick "r 「バッククォート」n

これには、既存のコマンドへのこの変更のみが必要です

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

その他のリソース

2
Pimp Juice IT

Bashには、このための$'…'構文があります。 OSに関係なく動作するはずです。

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

From Bashリファレンスマニュアル

$'string'の形式の単語は特別に扱われます。 Wordはstringに展開され、バックスラッシュでエスケープされた文字がANSIC標準で指定されているように置き換えられます。バックスラッシュエスケープシーケンスが存在する場合は、次のようにデコードされます。

[…]

\n
改行

\r
キャリッジリターン

[…]

1

純粋なバッチソリューション。もちろん、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!" …

ただし、Cライブラリは入出力時に'\n'とネイティブの改行文字の間で自動的に変換されるため、CR文字が実際に必要になる可能性は低く、LFを使用するだけで済みます。

0
phuclv