2010-10-01 12 views
2

Dans mon fichier .bat, comment puis-je vérifier si wget ou curl sont disponibles dans le système, quelles que soient les autres installations passées par l'utilisateur. Est-ce que cette vérification est possible, et puis-je avoir if then else logique dans mon fichier pour réagir différemment, comme nous le faisons dans la programmation normale. Je veux essentiellement utiliser wget ou curl pour télécharger un fichier.Comment .bat peut-il vérifier si curl ou wget existe?

If (wget is available) 
    do something 
else if (curl is available) 
    do something else 
else 
    tell the user they are out of luck 

Répondre

3

Si vous connaissez le chemin où vous vous attendez à trouver le fichier EXE, il est assez facile:

IF EXIST C:\Windows\wget.exe (*** do something with it ***) 

... vous pourrait bien sûr faire IF NOT EXIST avec un texte de présentation pour le copier, ou utilisez une instruction ELSE.

Sinon, si vous ne savez pas où vous pouvez trouver le fichier, vous pouvez chercher avec quelque chose comme ça (source originale trouvé here):

@echo off 
SETLOCAL 
(set WF=) 
(set TARGET=wget.exe) 

:: Look for file in the current directory 

    for %%a in ("" %PATHEXT:;= %) do (
    if not defined WF if exist "%TARGET%%%~a" set WF=%CD%\%TARGET%%%~a) 

:: Look for file in the PATH 

    for %%a in ("" %PATHEXT:;= %) do (
    if not defined WF for %%g in ("%TARGET%%%~a") do (
     if exist "%%~$PATH:g" set WF=%%~$PATH:g)) 

:: Results 
    if defined WF (
    *** do something with it here *** 
) else (
    echo The file: "%~1" was not found 
) 

Vous pouvez envelopper ce bloc entier dans un la fonction et l'appeler une fois pour chaque EXE (changer les %TARGET% de nouveau dans %~1, lui donner un: TITRE, puis call :TITLE wget.exe) ...

Alternativement, vous pouvez prendre une approche différente et essayez les commandes et voir si elles échouer. Depuis ERRORLEVEL de 0 signifie généralement le succès, vous pourriez faire quelque chose comme ceci:

wget -q <TARGET_URL> 
IF NOT ERRORLEVEL 0 (
    curl <TARGET_URL> 
    IF NOT ERRORLEVEL 0 (
    ECHO Download failed! 
    EXIT 1 
) 
) 
:: now continue on with your script... 
+0

Incidemment, le site [http://ss64.com/nt/](http://ss64.com/nt/) est une excellente ressource pour NT CMD Shell Conseils & Astuces. (Et ne manquez pas la page [syntaxe] (http://ss64.com/nt/syntax.html)!) – ewall

+0

La deuxième approche semble assez bonne pour moi. Je pense que la recherche allongera inutilement le temps d'exécution du script. – Berming

Questions connexes