Get last character of a string from a variable

前端 未结 2 1776
佛祖请我去吃肉
佛祖请我去吃肉 2020-12-28 16:25

I am having issues with a problem accomplished very easily in most languages but I can\'t seem to figure it out in batch. I want to extract the last character of a string.

相关标签:
2条回答
  • 2020-12-28 16:34
    set var=%var:~-1%
    

    see SET /? from the prompt for docco.


    @ECHO OFF
    SETLOCAL
    SET var=abcd
    SET var2=%var:~-1%
    CALL :show "-1"
    SET var2=%var:~-2%
    CALL :show "-2"
    SET var2=%var:~-3%
    CALL :show "-3"
    SET var2=%var:~1%
    CALL :show "1"
    SET var2=%var:~2%
    CALL :show "2"
    SET var2=%var:~3%
    CALL :show "3"
    SET var2=%var:~0,1%
    CALL :show "0,1"
    SET var2=%var:~0,2%
    CALL :show "0,2"
    SET var2=%var:~0,3%
    CALL :show "0,3"
    SET var2=%var:~0,-1%
    CALL :show "0,-1"
    SET var2=%var:~0,-2%
    CALL :show "0,-2"
    SET var2=%var:~0,-3%
    CALL :show "0,-3"
    SET var2=%var:~1,-1%
    CALL :show "1,-1"
    SET var2=%var:~1,-2%
    CALL :show "1,-2"
    SET var2=%var:~1,-3%
    CALL :show "1,-3"
    GOTO :eof
    
    :show
    echo Test with "var:~%~1" : var=%var% var2=%var2%
    GOTO :eof
    

    Results:

    Test with "var:~-1" : var=abcd var2=d
    Test with "var:~-2" : var=abcd var2=cd
    Test with "var:~-3" : var=abcd var2=bcd
    Test with "var:~1" : var=abcd var2=bcd
    Test with "var:~2" : var=abcd var2=cd
    Test with "var:~3" : var=abcd var2=d
    Test with "var:~0,1" : var=abcd var2=a
    Test with "var:~0,2" : var=abcd var2=ab
    Test with "var:~0,3" : var=abcd var2=abc
    Test with "var:~0,-1" : var=abcd var2=abc
    Test with "var:~0,-2" : var=abcd var2=ab
    Test with "var:~0,-3" : var=abcd var2=a
    Test with "var:~1,-1" : var=abcd var2=bc
    Test with "var:~1,-2" : var=abcd var2=b
    Test with "var:~1,-3" : var=abcd var2=
    

    For your IF statement, try

    IF "%var:~-1%"=="0" (dosomething) else (dosomethingelse)
    
    0 讨论(0)
  • 2020-12-28 16:51

    Batch does not use C style logic, so you really have to think differently for much of it.

    That said, String -right appears to be what you want: http://www.dostips.com/DtTipsStringManipulation.php#Snippets.RightString

    %str:~-1%
    

    That will get you the last character.

    0 讨论(0)
提交回复
热议问题