5 votes

Comment faire une déclaration "si et si" dans Windows Batch ?

Il s'agit plutôt d'une question de curiosité, mais existe-t-il un moyen, dans Windows Batch, de faire un if file.ext exists && if file2.ext exists (echo Yes.) else (echo No.) -type commande ?

5voto

programmer365 Points 1

Oui, vous pouvez mettre en œuvre l'opérateur AND/OR comme suit :

if exist file1.ext (
  if exist file2.ext (
    echo Yes, both file1.ext and file2.ext exist
  ) else (
    echo No, both file1.ext and file2.ext not exist
  )
) else (
  If exist file2.ext (
    echo file1.ext does NOT exist but file2.ext does exist
  )
)

Pour vérifier si File2.ext existe et file1.ext n'existe pas alors :

if exist file1.ext (
  if not exist file2.ext (
     echo file1.ext does exist but file2.ext does NOT exist
  )
)

Le placement des mots-clés Else est important !

Lire la suite :

0voto

iTwasnTme Points 5586

Vous n'avez pas besoin if pour vérifier si vos fichiers existent :

1. Remplacer if exist && file1 if exist file2 a dir /w file1 file2

dir /w file1.ext file2.ext
  • Obs.. : 1 Sorties :

enter image description here

2. Supprimez toute erreur éventuelle si l'un ou les deux fichiers n'existent pas et redirigez la sortie de la commande dir a findstr

2>nul dir /w file1.ext file2.ext | findstr /i "file1.ext.*file2.ext" ... 
  • Obs.. : 2 Supprimez toute erreur éventuelle en utilisant 2>nul et rediriger la sortie avec |

3. Utiliser l'opérateur :

  • findstr && pour gérer return 0 le fichier1.ext et le fichier2.ext existent tous deux
  • findstr || pour gérer return non 0 file1.ext ou file2.ext (ou les deux) n'existe pas

    2>nul dir /w file1.ext file2.ext | findstr /i "file1.ext.*file2.ext" && echo\yEp! || echo\nOp!


  • Obs.. : 3 Sur findstr ne doit pas être sensible à la casse (lettres majuscules | minuscules), utilisez /i Comme la chaîne de caractères comporte des espaces entre les noms de fichiers sur la même ligne, utilisez la fonction . um ou plus * caractères

    ... | findstr /i "file1.ext.*file2.ext" && ...


  • Cas/extrants possibles de findstr retours :

    : Exist file1.ext == True

    : Exist file2.ext == True
    : Results => Return "0" == echo\yEp!

    : Exist file1.ext == False

    : Exist file2.ext == False
    : Results => Return non "0" == echo\nOp!

    : Exist file1.ext == True

    : Exist file2.ext == False
    : Results => Return non "0" == echo\nOp!

    : Exist file1.ext == False

    : Exist file2.ext == True
    : Results => Return non "0" == echo\nOp!

Vous pouvez également utiliser un for pour faire de même lorsque plusieurs fichiers doivent être vérifiés et que l'un d'entre eux n'existe pas. Dans ce cas, vous pouvez immédiatement déplacer le traitement par lots vers une :label lorsque cette condition est remplie, si tous les fichiers existent, les lignes suivantes seront exécutées.

@echo off 

cd /d "%~dp0"
for %%i in ("file1.ext","file2.ext","file3.ext","file4.ext","file5.ext"
)do if not exist "%%~i" echo\File "%%~i" does Not exist && goto %:^( 

:: Run more commands below, because all your files exist...

goto=:EOF 

%:^(
:: Run more commands below, because one some of your files don't exist

goto=:EOF
  • Obs.. : 4 Après les exécutions pertinentes après le for ou à l'intérieur de l'étiquette %:^( を使用します。 goto=:EOF pour déplacer le traitement vers le E et O f F ile ou à un autre :label le cas échéant...

    : Run more commands below, because all your files exist...

    goto=:EOF

    %:^(
    : Run more commands below, because one some of your files don't exist

    goto=:EOF

  • Quelques lectures complémentaires :

    [] Dir / ?

    [] Findstr / ?

    [] Redirections dans le fichier bat

    [] Exécution conditionnelle || && ...

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X