Batch file: Find if substring is in string (not in a file)

前端 未结 10 2248
深忆病人
深忆病人 2020-11-22 14:14

In a batch file, I have a string abcdefg. I want to check if bcd is in the string.

Unfortunately it seems all of the solutions I\'m find

10条回答
  •  Happy的楠姐
    2020-11-22 14:48

    For compatibility and ease of use it's often better to use FIND to do this.

    You must also consider if you would like to match case sensitively or case insensitively.

    The method with 78 points (I believe I was referring to paxdiablo's post) will only match Case Sensitively, so you must put a separate check for every case variation for every possible iteration you may want to match.

    ( What a pain! At only 3 letters that means 9 different tests in order to accomplish the check! )

    In addition, many times it is preferable to match command output, a variable in a loop, or the value of a pointer variable in your batch/CMD which is not as straight forward.

    For these reasons this is a preferable alternative methodology:

    Use: Find [/I] [/V] "Characters to Match"

    [/I] (case Insensitive) [/V] (Must NOT contain the characters)

    As Single Line:

    ECHO.%Variable% | FIND /I "ABC">Nul && ( Echo.Found "ABC" ) || ( Echo.Did not find "ABC" )
    

    Multi-line:

    ECHO.%Variable%| FIND /I "ABC">Nul && ( 
      Echo.Found "ABC"
    ) || (
      Echo.Did not find "ABC"
    )
    

    As mentioned this is great for things which are not in variables which allow string substitution as well:

    FOR %A IN (
      "Some long string with Spaces does not contain the expected string"
      oihu AljB
      lojkAbCk
      Something_Else
     "Going to evaluate this entire string for ABC as well!"
    ) DO (
      ECHO.%~A| FIND /I "ABC">Nul && (
        Echo.Found "ABC" in "%A"
      ) || ( Echo.Did not find "ABC" )
    )
    
    Output From a command:
    
        NLTest | FIND /I "ABC">Nul && ( Echo.Found "ABC" ) || ( Echo.Did not find "ABC" )
    
    As you can see this is the superior way to handle the check for multiple reasons.
    

提交回复
热议问题