windows - Extraction af streng fra en linje ved hjælp af batch

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har data på nedenstående måde:


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


Jeg vil udpakke 'abcdefg' fra ovenstående linje ved hjælp af batch.


Ovenstående data kan ændres, så vi skal læse fra slutningen af ​​linjen til bagsiden og stoppe tæt ved : (kolon) afgrænsning og uddrage den.


Eventuelle sugeestions?

Bedste reference


Normalt udsender vi ikke kode uden at brugeren i det mindste forsøger at forsøge at skrive kode og gøre en indsats for at undersøge problemet. Enkel filosofi bag det er at lære en mand at fiske i forhold til at give dem fisken.


Giv det et forsøg.


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


Hvis dine data aldrig vil have et semikolon, som du behøver for at holde dig, kunne du også gøre det her.


@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


Og endnu et eksempel for godt mål. Den gode ting om batch-filer er mange gange, der er mere end en måde at male en kat på.


@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

Andre referencer 1


PowerShell kan bruge regex udtryk. Resultatet sættes i variablen R. Hvis der ikke er nogen kamp, ​​vil R ikke være noget.


@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\%