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?

59
demandé sur Nathan 2011-04-16 04:22:00

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.

68
répondu schnaader 2011-04-16 00:25:31

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.

19
répondu jwd 2011-04-16 00:25:34

, Vous devez faire ce qui suit:

if "%1" == "" (
    echo The variable is empty
) ELSE (
    echo The variable contains %1
)
11
répondu David angulo 2013-09-06 19:21:22

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.

8
répondu Darin 2013-02-13 22:40:06

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.

4
répondu mivk 2016-05-04 17:31:25

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.

1
répondu skchoe 2015-01-22 02:38:06