Используя пакетный файл, получить 4 символа после совпадения подстроки в другой строке? - PullRequest
1 голос
/ 13 ноября 2011

Я пытаюсь найти метод извлечения 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 Ответ

2 голосов
/ 13 ноября 2011

Один из способов улучшить это - исключить ненужную замену запятой:

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%

Преимущество использования поведения разделителя состоит в том, что он допускает номера портов любой длины.

...