使用批处理文件,在另一个字符串中的子字符串匹配后得到4个字符?

时间:2011-11-13 18:28:55

标签: batch-file properties dos

我正在尝试提取一种方法来提取字符串中子字符串匹配后出现的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

1 个答案:

答案 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%

使用分隔符行为的一个优点是它允许任意长度的端口号。