Извлечение строки из строки с использованием пакета - PullRequest
0 голосов
/ 27 апреля 2018

У меня есть данные в следующем порядке:

adb.hghgjjk.hkdhdl.Connhhhjj=hjkld\:hjkld\:thin\:hjdkdl\:3000\:abcdefg

Я хочу извлечь "abcdefg" из вышеуказанной строки, используя пакет.

Приведенные выше данные могут изменяться, поэтому нам нужно прочитать от конца строки до обратной стороны и остановиться возле разделителя : (двоеточие) и извлечь его.

Есть предложения?

Ответы [ 2 ]

0 голосов
/ 27 апреля 2018

PowerShell может использовать выражения регулярных выражений. Результат помещается в переменную R. Если совпадений нет, R будет ничем.

@ECHO OFF
SET "S=adb.hghgjjk.hkdhdl.Connhhhjj=hjkld\:hjkld\:thin\:hjdkdl\:3000\:abcdefg"
SET "R="
FOR /F %%a IN ('powershell -NoLogo -NoProfile -Command ^
    " '%S%' | Where-Object { $_ -match '.*:(.*$)' } | ForEach-Object { $Matches[1] } "') DO (SET "R=%%a")
ECHO R is %R%
0 голосов
/ 27 апреля 2018

Обычно мы не выдаем код, если пользователь, по крайней мере, не попытается написать какой-то код и приложит некоторые усилия для исследования проблемы. За этим стоит простая философия - учить человека ловить рыбу, а не отдавать ему рыбу.

Дайте это попробовать.

@echo off
set "string=adb.hghgjjk.hkdhdl.Connhhhjj=hjkld:hjkld:thin:hjdkdl:3000:abcdefg"
set "first=%string::=" & set "last=%"
echo %last%
pause

Если ваши данные никогда не будут содержать точку с запятой, которую вам нужно хранить, вы также можете сделать это.

@echo off
set "string=adb.hghgjjk.hkdhdl.Connhhhjj=hjkld:hjkld:thin:hjdkdl:3000:abcdefg"
set "string=%string::=;%"
FOR %%G IN (%string%) do set "last=%%G"
echo %last%
pause

И еще один пример для хорошей меры. Приятная вещь в пакетных файлах - это то, что существует несколько способов избавиться от кошки.

@echo off
set "string=adb.hghgjjk.hkdhdl.Connhhhjj=hjkld:hjkld:thin:hjdkdl:3000:abcdefg"
:loop
FOR /F "tokens=1* delims=:" %%G IN ("%string%") do (
    set "last=%%G"
    IF NOT "%%~H"=="" (
        SET "string=%%~H"
        GOTO loop
    )
)
echo %last%
pause
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...