Utilisation de plusieurs instructions IF dans un fichier de commandes
Lors de l'utilisation de plus de 1 SI la déclaration, existe t il une ligne directrice à suivre? Devraient-ils être regroupés? Dois-je utiliser des parenthèses pour envelopper les commande(s)?
Un exemple d'utilisation serait:
IF EXIST somefile.txt IF EXIST someotherfile.txt SET var=somefile.txt,someotherfile.txt
source d'informationauteur Mechaflash
Vous devez vous connecter pour publier un commentaire.
Il n'y a pas de façon "standard" de faire des fichiers batch, parce que la grande majorité de leurs auteurs et des responsables, soit ne comprennent pas les concepts de la programmation, ou ils pensent qu'ils ne s'appliquent pas à des fichiers batch.
Mais je suis un programmeur. Je suis habitué à la compilation, et je suis habitué à les débogueurs. Lot de fichiers ne sont pas compilés, et vous ne pouvez pas exécuter par un débogueur, afin qu'ils me rendent nerveux. Je vous suggère d'être très strict sur ce que vous écrivez, de sorte que vous pouvez être sûr qu'il fera ce que vous pensez que cela fonctionne.
Il y a certaines normes de codage qui disent: Si vous écrivez un
if
déclaration, vous devez utiliser des accolades, même si vous n'avez pas deelse
clause. Cela vous évite de subtil, difficile à déboguer des problèmes, et est clairement lisible. Je ne vois aucune raison que vous ne pouvait pas appliquer ce raisonnement à des fichiers batch.Prenons un coup d'oeil à votre code.
Et la
IF
de la syntaxe, de la commande,HELP IF
:Si vous enchaînez
IF
's que les commandes.Si vous utilisez la commune de codage standard de règle je l'ai mentionné ci-dessus, vous voulez toujours utiliser les parenthèses. Voici comment vous pourriez faire pour votre exemple de code:
Assurez-vous proprement format, et de faire une certaine forme de mise en retrait. Vous faire dans le code, et vous devez le faire dans vos scripts batch.
Aussi, vous devez aussi prendre l'habitude de toujours citer les noms de vos fichiers, et d'obtenir le citant à droite. Il y a quelques verbiage sous
HELP FOR
etHELP SET
qui va vous aider avec la suppression des guillemets supplémentaires lors de la re-citant les chaînes.Modifier
De vos commentaires, et en relisant votre question initiale, il me semble que vous voulez construire une liste séparée par des virgules de fichiers qui existent. Pour ce cas, vous pouvez simplement utiliser un tas de
if
/else
états, mais qui seraient le résultat d'un tas de copies de la logique, et ne serait pas du tout propre si vous aviez plus de deux fichiers.Une meilleure façon est de écrire une sous-routine qui vérifie un fichier unique de l'existence, et ajoute à une variable si le fichier spécifié existe. Puis il suffit d'appeler cette sous-routine pour chaque fichier que vous souhaitez vérifier:
L'explication donnée par Merlyn ci-dessus est assez complet. Cependant, je voudrais des précisions sur les normes de codage.
Lorsque plusieurs CAS sont enchaînés, la dernière commande est exécutée lorsque toutes les conditions précédentes sont remplies; ce qui est équivalent à l'opérateur. J'ai utilisé ce comportement maintenant et puis, mais j'ai clairement indiquer ce que j'ai l'intention de le faire par le biais d'un auxiliaire de Lot variable appelée ET:
Bien sûr, ce n'est PAS un vrai Et de l'opérateur et ne doit pas être utilisé en combinaison avec la clause ELSE. C'est juste un programmeur d'aide à augmenter la lisibilité d'une instruction qui est rarement utilisé.
Quand j'écris des programmes de traitement par Lots, j'ai toujours utiliser plusieurs variables auxiliaires que j'ai conçu dans le seul but d'écrire un code plus lisible. Par exemple:
Ces variables sida dans l'écriture des programmes par Lots de manière très claire et permet d'éviter des erreurs, comme Merlyn suggéré. Par exemple:
J'ai même des variables qui aide à la rédaction de TOUT-FAIRE et de la RÉPÉTITION JUSQU'à ce que, comme les constructions. Cela signifie que le Lot des variables peuvent être utilisées dans une certaine mesure, de préprocesseur valeurs.
Fichiers Batch ont vraiment très limité logique pouvoirs donc le mieux que vous pouvez espérer trouver une bonne solution de contournement qui, indirectement, réaliser ce que vous voulez. Cela ne veut pas dire que vous devriez vous sentir qu'elles sont inférieures à un vrai langage - ils encore la demande la même attention au détail et le manuel du débogage d'une application réelle. C'est juste que vous aurez besoin de travailler beaucoup plus dur de leur faire faire ce que vous voulez dans un solide.
Pour l'OP de la question, il sonne comme vous avez besoin de deux fichiers spécifiques à exister. Il suffit d'utiliser un cadre:
Mon exemple utilise 3 variables, mais vous pouvez simplement ajouter 1 à file_result_status si le fichier existe. Mais si vous voulez un contrôle plus granulaire plus tard dans votre fichier de commandes, vous pouvez enregistrer le résultat pour chaque fichier comme je l'ai fait de sorte que vous n'avez pas à garder le contrôle si un fichier existe sur le tard.
Est-ce faisable?
Vous pouvez structurize votre fichier de commandes à l'aide de goto