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 ?
Réponses
Trop de publicités?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 :
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 :
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érerreturn 0
le fichier1.ext et le fichier2.ext existent tous deux -
findstr ||
pour gérerreturn non 0
file1.ext ou file2.ext (ou les deux) n'existe pas2>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!
- Cas/extrants possibles de
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
-
Obs.. : 4 Après les exécutions pertinentes après le
-
Quelques lectures complémentaires :
[] Dir / ?
[] Findstr / ?