2012-10-11 5 views
7

Windowsバッチファイルを使用して構成ファイルを書き直そうとしています。 ファイルの行をループして、指定した改行で置き換えたい行を探しています。 Windowsバッチを使用して出力ファイルに二重引用符を含む文字列のエコー

は、私は、ファイル

:AddText %1 %2 
set Text=%~1% 
set NewLine=%~2% 
echo "%Text%" | findstr /C:"%markerstr%" 1>nul 
if errorlevel 1 (
    if not "%Text%" == "" (
     setlocal EnableDelayedExpansion 
     (
      echo !Text! 
    ) >> outfile.txt 
) else (
    echo. >> outfile.txt 
) 
) else (
    set NewLine=%NewLine"=% 
    setlocal EnableDelayedExpansion 
    (
     echo !NewLine! 
) >> outfile.txt 

) 
exit /b 

%テキスト%が埋め込まれた二重引用符付き文字列であるときに問題があるに行を書き込み「機能」を持っています。 それは失敗します。可能性としてはそれも失敗する原因となる他の文字があります。 これを設定ファイル内のすべてのテキストで処理できるようにするにはどうすればよいですか?

+0

(発言も出力で外部囲む二重引用符を生成します第二ライン)バッチを使用しないでください - powershellまたはvbscript、または別のスクリプト言語を使用してください。 –

+0

それは素晴らしいことですが、私は本当にそれをオプションとして持っていません。 –

+0

実際には、エコーに二重引用符が埋め込まれているようです。echo%Text%| findstr/C: "%markerstr%" 1> nul –

答えて

7

Text"をすべて^"に置き換えてみてください。 "

次試すことができ、通常の文字として扱われますので

^

が文字をエスケープです:あなたはエラーが発生する可能性があり

:AddText %1 %2 
set _Text=%~1% 
set Text=%_Text:"=^^^"% 

... rest of your code 

REM for example if %1 is "blah"blah"blah" 
REM _Text will be blah"blah"blah 
REM Text will be blah^"blah^"blah 

その他の文字を(あなたが上記でそれを解決することができますソリューション)は以下のとおりです。

1

Windowsのバッチシェル(コマンド)の二重引用符では、標準のコマンドライン上ではなく、二重引用符で囲まれた文字列内の二重の二重引用符で

echo Hello ^"Boy^" 
echo "Hello ""Boy""" 

:あなたはそれが確実に動作する場合

関連する問題