web-dev-qa-db-ja.com

文字列置換スクリプトで「=」を適切にエスケープするにはどうすればよいですか?

指定されたテキストベースのファイルの文字列を置き換えるバッチスクリプトを作成しました。私のファイル内では、文字列OutDir=binOutDir=Buildに置き換える必要がありますが、出力はbin=OutDir=Build=binになります。文字列が文字化けしないように、=OutDir=binをエスケープするにはどうすればよいですか? OutDir^=を試しましたが、ニンジンの使用も機能しません。

これが私の現在のスクリプトです:

@echo off 
    setlocal enableextensions disabledelayedexpansion

    set search=OutDir=bin
    set replace=OutDir=Build

    set textFile=%DOCUMENT%.txt

    for /f "delims=" %%i in ('type "%textFile%" ^& break ^> "%textFile%" ') do (
        set "line=%%i"
        setlocal enabledelayedexpansion
        >>"%textFile%" echo(!line:%search%=%replace%!
        endlocal
    )

置換する文字列の=を補正するために、検索変数と置換変数を変更しようとしましたが、機能しませんでした。

set search= "OutDir=bin"
set replace= "OutDir=Build"

set search="OutDir=bin"
set replace="OutDir=Build"

set "search=OutDir=bin"
set "replace=OutDir=Build"

"set search=OutDir=bin"
"set replace=OutDir=Build"
4
Mr. Mendelli

PowerShellを使用して文字列内の等号=をバッチで置き換える

テストしてから調査した後、私は StackOverflowでのこの回答 に出くわしました このスレッドとDosTipsへの投稿 そして=を純粋なバッチに置き換えました簡単ではありません。

大量の複雑なバッチロジックが必要なバッチスクリプトで問題が発生した場合、またはそれを簡単に機能させる方法がわからない場合は、通常、いくつかのPowerShellをに組み込んでみます。 Windowsネイティブであり、複雑なロジックのないバッチよりもはるかに堅牢である可能性があるため、混合します。

以下のバッチスクリプトは基本的に:

  • 検索および置換する文字列には、 Get-Content および Replace を使用します
  • 次に、 Set-Content を使用して、新しく置き換えられた文字列をファイルに戻します。

脚本

@echo off
setlocal enableextensions disabledelayedexpansion

set search=OutDir=bin
set replace=OutDir=Build
set textFile=%DOCUMENT%.txt

:PowerShell
SET PSScript=%temp%\~tmpStrRplc.ps1
ECHO (Get-Content "%~dp0%textFile%").replace("%search%", "%replace%") ^| Set-Content "%~dp0%textFile%">"%PSScript%"

SET PowerShellDir=C:\Windows\System32\WindowsPowerShell\v1.0
CD /D "%PowerShellDir%"
Powershell -ExecutionPolicy Bypass -Command "& '%PSScript%'"
EXIT

出力結果

OutDir=Build

その他のリソース

2
Pimp Juice IT