1

TeamCity に報告したい複数行のコメント (スタック トレース) を含む入力パラメーターを受け取るバッチ ファイルがあります。以下のコードは、1 行のコメントに対しては正常に機能し、メッセージから括弧と引用符を削除します。問題は、複数行のメッセージの最初の行だけが報告されることです。

rem Try to remove line breaks (not working)
setlocal EnableDelayedExpansion
SET message=%~1
set ^"message=!message:^

= !"

rem Remove square brackets and quotes
SET message=%message:[=%
SET message=%message:]=%
SET message=%message:'=%

rem Print message to console for TeamCity
echo ##teamcity[progressMessage '%message%']

すべての改行を削除し、echo ステートメントの前にスペースに置き換える方法はありますか?

4

2 に答える 2

1

一般的な解決策はないと思います。
しかし、それはあなたのための解決策が存在する可能性があります!

バッチが呼び出される方法によって異なります。新しいcmdインスタンスを介して呼び出される場合は、!cmdcmdline!を使用できます。改行やキャリッジリターン文字を使用しても、完全なパラメータにアクセスできます。

@echo off
setlocal EnableDelayedExpansion
set "message=!cmdcmdline!"
for /f %%a in ('copy /Z "%~dpf0" nul') do set "CR=%%a"
set LF=^


REM ** Two empty lines are required
FOR %%L in ("!LF!") do set "message=!message:%%~L=\n!"
FOR %%C in ("!CR!") do set "message=!message:%%~C=\r!"
echo ##teamcity[progressMessage '!message!']

あなたはinvoke.batでそれをテストすることができます

@echo off
setlocal EnableDelayedExpansion
set LF=^


for /f %%a in ('copy /Z "%~dpf0" nul') do set "CR=%%a"
cmd /c test one!lf!two!CR!three
于 2012-09-17T17:24:59.713 に答える
1

おそらく運が悪いでしょう。複数行の変数を作成することは可能ですが、バッチ ファイルで引数を介してそれらを受け取ることは不可能のようです。

バッチ間の呼び出しの場合は、複数行の値を環境変数に保存し、変数の名前を渡すことができます。

何らかの方法で呼び出し元のアプリケーションを制御する場合は、そこでニュースラインを置き換えることを検討するか、バッチ ファイル以外のものを呼び出すようにすることをお勧めします。

このSOの回答と、複数行の引数を受け取る問題について詳しく説明している回答に含まれるリンクも参照してください。

ちなみに、改行を置き換えるコードは正常に機能します。

于 2012-09-17T12:32:50.550 に答える