我遇到使用Windows cmd的问题。我需要找到并替换最后找到的子串。例如,我有一个字符串 - @192.168.0.1:1521:SID
。我需要用斜杠替换最后一个冒号并接收@192.168.0.1:1521/SID
。
我该怎么做?
答案 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%