Windows 批量替换最后找到的子字符串

Windows batch replace last found substring

我在使用 windows cmd 时遇到问题。我需要找到并替换最后找到的子字符串。例如我有一个字符串 - @192.168.0.1:1521:SID。我需要用斜杠替换最后一个冒号并收到 @192.168.0.1:1521/SID.

我该怎么做?

如果格式始终相同(例如始终是末尾的第 4 个字符),您可以进行优化,但作为一般解决方案,我会像下面这样编码。

set result=
set left=
set right=@192.168.0.1:1521:SID

:loop
call :sub1 "%right%"
if %result% equ 1 goto :loop

@echo %left%/%right%
goto :eof




:sub1
for /f "delims=: tokens=1*" %%i in ("%~1") do (
    if ["%%j"]==[""] (
        set /a result=0
        goto :eof
    )

    if ["%left%"]==[""] (
        set left=%%i
    ) else (
        set left=%left%:%%i
    )

    set /a result=1
    set right=%%j
)
goto :eof

解释:

sub1 中的代码在左数第一个冒号处拆分参数,除非参数中没有冒号 - 在这种情况下,它将结果设置为 0 和 returns。 左边的部分被添加到左变量,右边的部分被设置为右变量。

主循环调用子 sub1 直到没有更多的拆分,你就完成了。

看起来您的格式定义得相当明确:IPAddress:Number:SID,因此可以将其视为用 /

替换第二个 :
@echo off
set val=@192.168.0.1:1521:SID
for /f "tokens=1,2,* delims=:" %%a in ("%val%") do set newval=%%a:%%b/%%c
echo %newval%
yourcommand %newval%