[Windows] File batch: trova se la sottostringa è in stringa (non in un file)


Answers

È possibile reindirizzare la stringa di origine a findstr e controllare il valore di ERRORLEVEL per verificare se è stata trovata la stringa del modello. Un valore pari a zero indica il successo e il modello è stato trovato. Ecco un esempio:

::
: Y.CMD - Test if pattern in string
: P1 - the pattern
: P2 - the string to check
::
@echo off

echo.%2 | findstr /C:"%1" 1>nul

if errorlevel 1 (
  echo. got one - pattern not found
) ELSE (
  echo. got zero - found pattern
)

Quando viene eseguito in CMD.EXE, otteniamo:

C:\DemoDev>y pqrs "abc def pqr 123"
 got one - pattern not found

C:\DemoDev>y pqr "abc def pqr 123" 
 got zero - found pattern
Question

In un file batch, ho una stringa abcdefg . Voglio controllare se bcd è nella stringa.

Sfortunatamente sembra che tutte le soluzioni che sto cercando cerchino un file per una sottostringa, non una stringa per una sottostringa.

C'è una soluzione facile per questo?




Per compatibilità e facilità d'uso è spesso meglio usare FIND per fare questo.

È inoltre necessario considerare se si desidera abbinare la custodia in modo sensibile o senza distinzione tra maiuscole e minuscole.

Il metodo con 78 punti (credo che mi riferissi al post di paxdiablo) corrisponderà solo a Case Sensitively, quindi devi mettere un controllo separato per ogni variazione del caso per ogni possibile iterazione che potresti voler abbinare.

(Che dolore! A solo 3 lettere significa 9 test diversi per eseguire il controllo!)

Inoltre, molte volte è preferibile associare l'output del comando, una variabile in un loop o il valore di una variabile puntatore nel batch / CMD che non è così semplice.

Per questi motivi questa è una metodologia alternativa preferibile:

Usa: Trova [/ I] [/ V] "Caratteri da abbinare"

[/ I] (case Insensitive) [/ V] (NON deve contenere i caratteri)

Come singola linea:

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"
)

Come accennato, questo è ottimo per cose che non sono in variabili che consentono anche la sostituzione di stringhe:

FOR %A IN (oihu AljB lojkAbCk) DO ( ECHO.%~A| FIND /I "ABC">Nul && ( Echo.Found "ABC" ) || ( Echo.Did not find "ABC" ) )

Uscita da un comando:

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

Come puoi vedere questo è il modo migliore per gestire il controllo per molteplici motivi.