Dans un script batch, je dois rediriger le flux de script en fonction de la correspondance entre une variable et le début d'une autre. En particulier, je veux faire quelque chose comme ceci:
IF %CD% BEGINSWITH %USERPROFILE% (Echo You can do stuff here!) ELSE (Echo You don't belong here!)
J'ai eu du mal à trouver quoi que ce soit pour résoudre ce problème en ligne, ou du moins quelque chose qui ait un sens pour moi. Si cela est faisable, veuillez démontrer comment et pourquoi la solution viable fonctionne.
/I
option n'est pas nécessaire. Puisque nous faisons correspondre les variables de sortie de commande et / ou d’environnement, sans la participation de l’utilisateur, il n’ya aucune chance que la casse ne corresponde. Merci pour la clarification, cependant./I
commutateur carCD
vous pouvez signaler la lettre de lecteur en minuscule ou en majuscule, selon la manière dont le répertoire actuel a été spécifié. En outre, la%USERPROFILE%
valeur correspond probablement à la casse des noms de dossiers réels, mais elle ne doit pas nécessairement correspondre à la casse.CD
dans un dossier, si par la suite je lanceCD
sans aucun argument, il renvoie le chemin dans son cas propre (tel que stocké dans le système de fichiers).%USERPROFILE%
renvoie également le chemin du profil de l'utilisateur dans sa casse appropriée. Ainsi, si j’aiCD /D c:\users\me
alors la sortie de mon prochainCD
(sans argument),C:\Users\Me
ce sera exactement ce qui va correspondre%USERPROFILE%
- cas et tout - si j’exécute des commandes en tant que "Moi".J'ai fini par le découvrir moi-même. Je ne sais pas trop pourquoi je n'ai pas remarqué cette solution ailleurs.
Normalement,
FINDSTR
recherche des chaînes dans un fichier texte donné. Cependant, il peut également accepter les entrées du pipeline. Ici, nous utilisonsECHO
habituellement le répertoire courant (%CD%
) dans le pipeline, puis nous demandonsFINDSTR
de rechercher le dossier de profil de l'utilisateur ("%USERPROFILE%"
- guillemets obligatoires) au début (/B
) des données acheminées.Puisque
FINDSTR
renvoie un anERRORLEVEL
, nous pouvons vérifier cela avec uneIF
déclaration ultérieure , puis procéder en conséquence.la source