ressemblent étrangement à la pseudo-code écrit dans la question initiale:
set FILE1=c:\path\tool.exe
set FILE2=c:\path\to\other\tool.exe
if exist "%FILE1%" (
%FILE1%
) else (
%FILE2%
)
Comme Joey a fait remarquer c'est en fait la forme ouverte de:
%FILE1% || %FILE2%
mais je ne suis pas d'accord. Les anciens runs FICHIER2
- quand FILE1 existe pas, ou
- EXISTE mais a échoué.
Il imprime également un message d'erreur supplémentaire lorsqu'un fichier ne peut pas être exécuté (principalement parce qu'il n'a pas été trouvé ou que l'accès est interdit). Pour supprimer cette utilisation du message:
(%FILE1% || %FILE2%) 2>nul
Par exemple
> (echo a || echo b)
a
> (echoa || echo b) 2>nul
b
Pour supprimer toute sortie, et juste arranger que l'un des deux fichiers est exécuté:
(%FILE1% || %FILE2%) 1>&2 2>nul
ou:
((%FILE1% || %FILE2%) 1>&2 2>nul) || echo both have failed
comme dans:
> ((echo a || echo b) 2>nul) || echo both have failed
a
> ((echoa || echo b) 2>nul) || echo both have failed
b
> ((echoa || echob) 2>nul) || echo both have failed
both have failed
Notez que vous pouvez également couper ce court-circuit: 'file.exe || other.exe' (et vous n'avez pas besoin de 'call' de toute façon.) – Joey
Le problème avec ceci, c'est que si file.exe existe, mais échoue pour une raison quelconque, il va aussi exécuter other.exe. other.exe si file.exe échoue en raison de ne pas exister. –