Windows Fichiers Batch: si d'autre
Je suis en train de faire un simple fichier batch qui nécessite un argument (vous pouvez fournir de 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 si un argument est fourni, de manière récursive affichage de tous les fichiers dans le dossier. Sinon, dire non.
Il fonctionne quand je fournir un argument, mais si je ne fournis pas un il va tout simplement me dire ( was unexpected at this time
.
Je veux dire, ça marche, mais je voulais au moins afficher un convivial message expliquant pourquoi il ne fonctionne pas. Comment dois-je changer le code?
Vous devez vous connecter pour publier un commentaire.
doit être
Si un argument n'est pas donné, il est complètement vide, même pas
""
(ce qui représente une chaîne vide dans la plupart des langages de programmation). Nous utilisons donc l'entourant de guillemets pour détecter un argument vide.%1
fait référence à un fichier ou chemin d'accès, car, contrairement à l'accolade{
et}
, double-guillemets"
ne peut jamais apparaître dans n'importe quel chemin d'accès Windows ou un nom de fichier. Donc, si vous voulez éviter d'essayer de puzzle choses que résoudre à{}} }} == {}
. Peut-être de façon plus réaliste, notez que{{ea14c59a-889c-495b-8bb6-be78cf960e93}.txt} == {{ea14c59a-889c-495b-8bb6-be78cf960e93.txt}}
, par exemple, est faux.Entourent votre
%1
avec quelque chose.Par exemple:
Un autre que j'ai vu assez souvent:
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", il est en fait un endroit vide dans votre fichier source à ce point.Puis après le remplacement, l'interprète tente d'analyser les
if
déclaration et devient confus.Vous devez faire ce qui suit:
Une autre astuce est d'utiliser "%~1" au lieu de "%1". De Type "APPEL /?" dans la ligne de commande Windows pour obtenir plus de détails.
%~1 - expands %1 removing any surrounding quotes (")
sorte que personne n'ait à le chercher.Une autre solution serait de définir une variable, et de vérifier si elle est définie:
Malheureusement, à l'aide de
%1
directement avecDEFINED
ne fonctionne pas.que vous avez à faire comme ça...
si pas Un "%1" == "A"
si l'argument d'entrée de %1 est nulle,
votre code aura problème.