我正在尝试提取一种方法来提取字符串中子字符串匹配后出现的4个字符。我能想出的最接近的东西是非常低效的外观,甚至都不能很好地工作。有谁知道更好的方法吗?
@echo off
cls
SET "_TMPVAR=Ports|http:8000|https:8443|"
SET _TMPVAR=%_TMPVAR:|=,%
FOR /F "tokens=1-3 delims=," %%m in ("%_TMPVAR%") do (
SET "_TMPVAR1=%%n"
SET "_TMPVAR2=%%o"
)
SET _HTTPS=0000
IF "%_TMPVAR1:~4,1%"=="s" (
SET "_HTTPS=%_TMPVAR1:~-4%"
)
IF "%_TMPVAR2:~4,1%"=="s" (
SET "_HTTPS=%_TMPVAR2:~-4%"
)
SET _
ECHO SSL Port is %_HTTPS%
pause
答案 0 :(得分:2)
改善它的一种方法是消除看似不必要的逗号替换:
SET "_TMPVAR=Ports|http:8000|https:8443|"
FOR /F "tokens=1-3 delims=|" %%m in ("%_TMPVAR%") do (
SET "_TMPVAR1=%%n"
SET "_TMPVAR2=%%o"
)
此外,您可以利用分隔符列表拆分|
和 :
来分解您的方案和端口,允许您将逻辑放入FOR
声明:
@echo off
cls
SET "_TMPVAR=Ports|http:8000|https:8443|"
SET _HTTPS=0000
FOR /F "tokens=2-7 delims=|:" %%a in ("%_TMPVAR%") do (
IF %%a==https SET _HTTPS=%%b
IF %%c==https SET _HTTPS=%%d
IF %%e==https SET _HTTPS=%%f
)
SET _
ECHO SSL Port is %_HTTPS%
使用分隔符行为的一个优点是它允许任意长度的端口号。