指定されたテキストベースのファイルの文字列を置き換えるバッチスクリプトを作成しました。私のファイル内では、文字列OutDir=bin
をOutDir=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"
=
をバッチで置き換えるテストしてから調査した後、私は 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