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

时间:2015-04-15 09:26:40

标签: windows cmd

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

我该怎么做?

2 个答案:

答案 0 :(得分:0)

如果格式始终相同(例如,总是从末尾开始的第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并返回。 左侧部分被添加到左侧变量,右侧部分被添加到右侧变量。

主循环调用sub sub1直到没有更多分割并且你完成了。

答案 1 :(得分:0)

看起来你有一个相当明确的格式: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%