Dans un fichier batch, j'ai une chaîne abcdefg
. Je veux vérifier si bcd
est dans la chaîne.
Malheureusement, il semble que toutes les solutions que je trouve recherchent un fichier pour une sous-chaîne, pas une chaîne pour une sous-chaîne.
Existe-t-il une solution simple à cela?
Windows
etcmd
ou c'estms-dos
. MSDOS ne fait pas partie de Windows depuis longtemps .Réponses:
Oui, vous pouvez utiliser des substitutions et vérifier la chaîne d'origine:
Le
%str1:bcd=%
bit remplacera unbcd
instr1
par une chaîne vide, ce qui le rend différent de l'original.Si l'original ne contenait pas de
bcd
chaîne, la version modifiée sera identique.Le test avec le script suivant le montrera en action:
Et les résultats de différentes séries:
Quelques notes:
if
déclaration est la viande de cette solution, tout le reste est du support.x
avant des deux côtés de l'égalité est de s'assurer que la chaînebcd
fonctionne correctement. Il protège également contre certains caractères de départ "incorrects".la source
Vous pouvez diriger la chaîne source vers
findstr
et vérifier la valeur deERRORLEVEL
pour voir si la chaîne de modèle a été trouvée. Une valeur de zéro indique le succès et le modèle a été trouvé. Voici un exemple:Lorsque cela est exécuté dans CMD.EXE, nous obtenons:
la source
Je fais habituellement quelque chose comme ça:
Exemple:
Production:
Je ne sais pas si c'est la meilleure façon.
la source
Pour des raisons de compatibilité et de facilité d'utilisation, il est souvent préférable d'utiliser FIND pour ce faire.
Vous devez également déterminer si vous souhaitez faire correspondre la casse de manière sensible ou insensible.
La méthode avec 78 points (je pense que je faisais référence au message de paxdiablo) ne correspondra qu'à la sensibilité à la casse, vous devez donc cocher séparément chaque variation de cas pour chaque itération possible que vous souhaitez faire correspondre.
(Quelle douleur! À seulement 3 lettres, cela signifie 9 tests différents afin d'accomplir la vérification!)
De plus, il est souvent préférable de faire correspondre la sortie de la commande, une variable dans une boucle ou la valeur d'une variable de pointeur dans votre lot / CMD qui n'est pas aussi simple.
Pour ces raisons, il s'agit d'une méthodologie alternative préférable:
Utilisez: Rechercher [/ I] [/ V] "Caractères à associer"
[/ I] (insensible à la casse) [/ V] (ne doit PAS contenir les caractères)
En ligne simple:
Multi-ligne:
Comme mentionné, c'est idéal pour les choses qui ne sont pas dans des variables qui permettent également la substitution de chaînes:
la source
setlocal EnableExtensions
ensuite utiliserIF /I
pour effectuer des comparaisons insensibles à la casse.Si vous détectez une présence, voici la solution la plus simple:
Cela fonctionne très bien pour déposer la sortie des commandes Windows dans une variable booléenne. Remplacez simplement l'écho par la commande que vous souhaitez exécuter. Vous pouvez également enchaîner les chaînes de Findstr pour qualifier davantage une instruction à l'aide de canaux. EG pour le contrôle des services (SC.exe)
Celui-ci évalue la sortie de SC Query pour les services de mise à jour Windows qui se présente sous la forme d'un texte multiligne, trouve la ligne contenant "état" puis recherche si le mot "en cours d'exécution" apparaît sur cette ligne et définit le niveau d'erreur en conséquence.
la source
SET STRING=abcdefgh SET SUBSTRING=bcd ECHO %STRING% | FINDSTR /C:"%SUBSTRING%" >nul & IF ERRORLEVEL 1 (ECHO CASE FALSE) else (ECHO CASE TRUE)
J'arrive probablement un peu trop tard avec cette réponse, mais la réponse acceptée ne fonctionne que pour vérifier si une "chaîne codée en dur" fait partie de la chaîne de recherche.
Pour une recherche dynamique, vous devez procéder comme suit:
Remarque: Vous pouvez prendre les deux variables comme arguments.
la source
La meilleure réponse était ici :
la source
la source
Les solutions qui recherchent un fichier pour une sous-chaîne peuvent également rechercher une chaîne , par exemple.
find
oufindstr
.Dans votre cas, la solution simple serait de diriger une chaîne vers la commande au lieu de fournir un nom de fichier, par exemple.
chaîne sensible à la casse:
echo "abcdefg" | find "bcd"
ignorer la casse de la chaîne:
echo "abcdefg" | find /I "bcd"
SI aucune correspondance trouvée, vous obtiendrez une réponse de ligne vierge sur CMD et% ERRORLEVEL% défini sur 1
la source