307 votes

Ce qui est la bonne façon de tester si la variable est vide dans un fichier batch, si pas « %1 » == « » GOTO SomeLabel, échoue si %1 a citations

J’ai besoin de tester si une variable est définie ou pas. J’ai essayé plusieurs techniques, mais ils semblent échouer quand %1 est entouré de guillemets, comme dans le cas lorsque %1 = « chemin de c:\some avec des espaces ».

Selon ce site. Voici les types de syntaxe IF supportés. Donc, je ne vois pas un moyen de le faire.

341voto

Dan Story Points 4836

Utilisez des parenthèses au lieu de guillemets :

Remarque : La réponse initiale était :
``
@jeb fait remarquer ceci était précaire et @Synetech a proposé une alternative, alors j’ai révisé la réponse.

250voto

jamesdlin Points 13455

Vous pouvez utiliser :

pour dépouiller l’ensemble externe des citations.

52voto

jeb Points 26035

L'un des meilleurs semi solutions de copier - %1 dans une variable et ensuite utiliser expansion retardée, comme delayedExp. est toujours en sécurité à l'encontre de tout contenu.

set "param1=%1"
setlocal EnableDelayedExpansion
if "!param1!"=="" ( echo it is empty )
rem ... or use the DEFINED keyword now
if defined param1 echo There is something

L'avantage, c'est que le fait de traiter avec param1 est absolument sûr.

Et le réglage de param1 permettra de travailler dans de nombreux cas, comme

test.bat hello"this is"a"test
test.bat you^&me

Mais il échouera avec l'étrange contenu comme

test.bat "&"^&

Si vous voulez être 99% de preuve de balle, vous pourriez lire le Comment recevoir même le plus étrange des paramètres de ligne de commande?

21voto

Andy Morris Points 1363

De IF / ? :

Si les Extensions de commandes sont activées, IF est modifié comme suit :

......

Les œuvres de conditionnels définis comme EXISTS sauf elle prend un nom de variable d’environnement et renvoie true si la variable d’environnement est définie.

4voto

aphoria Points 8128

J’utilise habituellement ceci :

Si %1 est vide, l’IF comparera «. « à ». » qui va avoir la valeur true.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X