L'environnement date référence variable %date%
est remplacé par interpréteur de commandes de Windows pendant l'état de pré-traitement par la région (pays) chaîne dépendante avant la commande IF est exécutée du tout.
sur l'exécution du fichier de commandes à partir d'une invite de commande, on peut voir que la ligne de commande IF est après traitement préalable:
if Sun 10/15/2017=="Sun 10/15/2017" (echo "Today is Sunday") else (echo "Today is Unknown")
Ainsi, la syntaxe de commande IF est incorrect après l'environnement expansion de variable car il y a Sun
comme premier argument, un espace et Sun 10/15/2017=="Sun 10/15/2017"
étant interprété comme un opérateur inattendu.
Chaque fois que vous comparez des chaînes, il est recommandé d'utiliser des guillemets, car le caractère espace n'est pas interprété comme un séparateur d'argument. Et les caractères &()[]{}^=;!'+,`~|<>
sont également interprétés en tant que caractères littéraux dans une chaîne entre guillemets doubles.
Les guillemets sont également comparés par IF lors de l'exécution de la comparaison de chaîne. Il est donc nécessaire que les deux chaînes comparées soient placées entre guillemets.
@echo off
if "%DATE%"=="Sun 10/15/2017" (echo "Today is Sunday.") else (echo "Today is unknown.")
pause
Une autre solution si la date dépend de la région contient également le jour de la semaine abrégé.
@echo off
if not "%DATE:Sun=%"=="%DATE%" (echo "Today is Sunday.") else (echo "Today is unknown.")
pause
Ce fichier batch compare la chaîne de date avec toutes les occurrences insensibles à la casse de Sun
remplacés par rien avec la chaîne de date non modifiée. La substitution de chaîne est réussie uniquement sur la chaîne de date contenant l'abréviation de jour de la semaine Sun
et dans ce cas, les deux chaînes comparées ne sont pas égales.
Sur mon ordinateur le IF condition est jamais vrai que %DATE%
déplie sur une chaîne de date ne contenant pas de jour de la semaine selon la configuration dans la région de Windows et Langue paramètres. Pour comprendre les commandes utilisées et leur fonctionnement, ouvrez une fenêtre d'invite de commande, exécutez les commandes suivantes et lisez attentivement toutes les pages d'aide affichées pour chaque commande.
Nichie, s'il vous plaît mettre à jour [votre dernière question] (https://stackoverflow.com/q/46744276/6738015) avec la solution que vous avez trouvé, et publiez aussi les informations demandées dans [la question précédente] (https://stackoverflow.com/a/46743856/6738015) aussi! Les membres hésitent souvent à fournir des réponses à ceux qui ne respectent pas les demandes raisonnables. En réponse à cette question, vous n'avez pas trouvé les doubles quotes de chaque côté de la comparaison et nous n'avons aucune idée du format de votre '% date%' variable! – Compo
Vous avez des guillemets d'un côté de la comparaison pour protéger les espaces. Pourquoi pensez-vous que vous n'en auriez pas besoin de l'autre côté? – Squashman