Windows批处理替换上次找到的子字符串

Windows批处理替换上次找到的子字符串,windows,cmd,Windows,Cmd,我在使用windows cmd时遇到了问题。我需要找到并替换上次找到的子字符串。例如,我有一个字符串-@192.168.0.1:1521:SID。我需要用斜杠替换最后一个冒号,并接收@192.168.0.1:1521/SID 如何做到这一点?如果格式始终相同,您可以进行优化,例如,始终是从结尾开始的第四个字符,但作为一般解决方案,我将按照以下方式进行编码 set result= set left= set right=@192.168.0.1:1521:SID :loop call :sub1

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


如何做到这一点?

如果格式始终相同,您可以进行优化,例如,始终是从结尾开始的第四个字符,但作为一般解决方案,我将按照以下方式进行编码

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并返回。 左侧部分添加到左侧变量,右侧部分设置为右侧变量


主循环调用sub-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%

谢谢你的完整答案!伟大的请记住接受这个答案来结束这个问题。