Проще и ближе к исходному коду:
IF EXIST "file1.txt" IF EXIST "file2.txt" cd "folder" & start sample.exe & goto commonexit
IF EXIST "file3.txt" IF EXIST "file4.txt" cd "folder2" & start sample2.exe & goto commonexit
IF EXIST "file5.txt" IF EXIST "file6.txt" cd "folder3" & start sample3.exe & goto commonexit
rem Put here code that will execute when none of the previous paths execute...
:commonexit
РЕДАКТИРОВАТЬ : Добавлен новый метод
Новый метод нижепозволяет написать эффективную операцию «И» для нескольких тестов «EXIST filename» и связать несколько из этих тестов способом, аналогичным нескольким командам «ELSE IF»:
(for /F "skip=1" %%a in ('dir /B file1.txt file2.txt') do break) && (
echo Both file1.txt and file2.txt exists
echo Process they here
) || (for /F "skip=1" %%a in ('dir /B file3.txt file4.txt') do break) && (
echo Both file3.txt and file4.txt exists
echo Process they here
) || (for /F "skip=1" %%a in ('dir /B file5.txt file6.txt') do break) && (
echo Both file5.txt and file6.txt exists
echo Process they here
) || echo Last else
Этот метод основан назначение «ExitCode», возвращаемое командой for /F
, как объяснено на в этом ответе (ниже раздел «Управление кодом выхода» раздел).Этот метод можно легко расширить на большее количество файлов, просто вставив дополнительные имена файлов и , настроив значение skip = 1 на количество файлов минус один.Например:
(for /F "skip=2" %%a in ('dir /B file1.txt file2.txt file3.txt') do break) && (
echo All file1.txt, file2.txt and file3.txt exists
echo Process they here
) || (for /F "skip=2" %%a in ('dir /B file4.txt file5.txt file6.txt') do break) && (
echo All file4.txt, file5.txt and file6.txt exists
echo Process they here
) || echo Last else