Fichiers Batch Windows: si Autre
Je fais un fichier batch simple qui nécessite un argument (vous pouvez en fournir plus, mais je les ignore).
Pour les tests, c'est ce que j'ai jusqu'à présent.
if not %1 == "" (
dir /s/b %1
) else (
echo no
)
Fondamentalement, je veux dire que si un argument est fourni, afficher récursivement tous les fichiers dans le dossier. Sinon, dire non.
Cela fonctionne quand je fournis un argument, mais si je n'En fournis pas un, il me le dira simplement ( was unexpected at this time
.
Je veux dire, cela fonctionne, mais je voulais au moins afficher un message convivial expliquant pourquoi ça ne marche pas. Comment dois-je changer le code?
6 réponses
if not %1 == "" (
Doit être
if not "%1" == "" (
Si un argument n'est pas donné, il est complètement vide, pas même ""
(qui représente une chaîne vide dans la plupart des langages de programmation). Nous utilisons donc les guillemets environnants pour détecter un argument vide.
Entourez votre %1
avec quelque chose.
Par exemple:
if not "%1" == ""
Un Autre que j'ai vu assez souvent:
if not {%1} == {}
Et ainsi de suite...
Le problème, comme vous pouvez probablement le deviner, c'est que le %1
est littéralement remplacé par le vide. Ce n'est pas une chaîne vide, c'est en fait un endroit vide dans votre fichier source à ce moment-là.
Ensuite, après le remplacement, l'interpréteur essaie d'analyser l'instruction if
et devient confus.
, Vous devez faire ce qui suit:
if "%1" == "" (
echo The variable is empty
) ELSE (
echo The variable contains %1
)
Une autre astuce connexe consiste à utiliser "%~1" au lieu de "%1". De Type "APPEL /?"à la ligne de commande dans Windows pour obtenir plus de détails.
Une autre solution serait de définir une variable, et de vérifier si elle est définie:
SET ARG=%1
IF DEFINED ARG (echo "It is defined: %1") ELSE (echo "%%1 is not defined")
Malheureusement, utiliser %1
directement avec DEFINED
ne fonctionne pas.
Tu dois faire comme ça...
Si ce N'est pas "a%1" = = " A "
Si l'argument d'entrée %1 est null, votre code aura un problème.