我已经制作了一个批处理脚本,该脚本替换了指定的基于文本的文件中的字符串。在我的文件中,字符串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"
=
使用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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句