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%
我在使用 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%