J'écris un script chauve-souris dans lequel j'appelle un programme (tel que javac). Pour simplifier, je veux vérifier si la commande existe avant de l'exécuter. c'est-à-dire si la commande existe dans PATH.
Par exemple,
if (my_command.exe is a recognized command) then (
my_command.exe my_args
) else (
REM Output was probably "'my_command.exe' is not recognized as an internal or external command, operable program or batch file."
REM Do not run my_command.exe
)
Quelle est la meilleure façon de faire cela dans Windows?
windows
command-line
batch
script
utilisateur46097
la source
la source
Réponses:
la source
>nul 2>nul
derrière lemycommand
.Le code ci-dessous doit toujours s'exécuter proprement, sans sortie de mémoire.
Sortie:
Le même code qu'un one-liner:
Sortie:
Notez que l'ordre
&&
et||
semble avoir de l'importance. En outre, la commande dont vous testez l'existence doit être renvoyée avec un niveau d'erreur <= 0 pour que cela fonctionne. Espérons que la commande a /? ou --help arguments ou, comme avec java, une commande d'informations de version.la source
Le moyen le plus simple consiste simplement à exécuter la commande, mais cela pose bien sûr d'autres problèmes, car vous ne voulez peut-être pas lancer un processus aléatoire.
est une alternative qui recherche le programme dans les chemins listés par la
%PATH%
variable d'environnement. C'est essentiellement une version pure batch dewhich(1)
. On peut faire mieux, mais en gros, c'est ça.la source
Pour ma situation. Le moyen le plus simple consiste à utiliser le || ou && opérateur.
ou
la source
Quelques améliorations à la version ci-dessous. Testez cette commande et supprimez les sorties inutiles.
la source
WHERE \Windows\System32\cmd.exe
=>INFO: Could not find files for the given pattern(s).
Si l'installation d'outils supplémentaires est correcte, une
where
commande est incluse dans les kits de ressources. voir l' équivalent Windows de whereis? .Sinon, pour les versions de Windows qui ne sont pas trop anciennes, c'est faisable pur
cmd
, comme indiqué dans la recherche exécutable de Dos sauf PATH .la source
Je sais que ce n’est pas tout à fait ce que vous recherchez, mais avec un léger changement de logique, il devrait répondre à vos besoins.
Chaque commande exécutée a un code de retour (ou errorlevel). Si le code de retour est 0 (zéro), la commande a été exécutée avec succès. Si le code de retour est supérieur à 0, quelque chose s'est mal passé.
Voir ici pour plus de détails.
Quelque chose comme -
la source
Bien que tous ces moyens puissent fonctionner, pourquoi ne pas les intégrer?
Exécuter "si /?" sur la ligne de commande pour plus de détails
la source
PATH
.