Tin*_*nth 5 string replace cmd batch-file
除了SED,如何更换等号?如何在字符串替换中使用字符串变量?
考虑这个例子:
For /F "tokens=*" %%B IN (test.txt) DO (
SETLOCAL ENABLEDELAYEDEXPANSION
SET t=is
SET old=%%B
SET new=!old:t=!
ECHO !new!
ENDLOCAL
)
:: SET new=!old:==!
Run Code Online (Sandbox Code Playgroud)
两个问题:
首先,我不能在!:=!中使用变量%t%.
SET t=is
SET old=%%B
SET new=!old:t=!
Run Code Online (Sandbox Code Playgroud)
其次,我无法替换命令行中的等号
SET new=!old:==!
Run Code Online (Sandbox Code Playgroud)
我自己刚刚为此创建了一个简单的解决方案,也许它可以帮助某人。
缺点(或优点,取决于您想要做什么)是多个等号一个接一个地处理,就像一个等号一样。(例如:“str==ing”给出与“str=ing”相同的输出)
@echo off
set "x=this is=an test="
echo x=%x%
call :replaceEqualSign in x with _
echo x=%x%
pause&exit
:replaceEqualSign in <variable> with <newString>
setlocal enableDelayedExpansion
set "_s=!%~2!#"
set "_r="
:_replaceEqualSign
for /F "tokens=1* delims==" %%A in ("%_s%") do (
if not defined _r ( set "_r=%%A" ) else ( set "_r=%_r%%~4%%A" )
set "_s=%%B"
)
if defined _s goto _replaceEqualSign
endlocal&set "%~2=%_r:~0,-1%"
exit /B
Run Code Online (Sandbox Code Playgroud)
如您所见,您可以像这样使用该函数:
call :replaceEqualSign in variableName with newString
Run Code Online (Sandbox Code Playgroud)