如何制作包含多个其他条件的批处理文件?

时间:2018-05-11 06:38:46

标签: batch-file

我想制作一个包含多个其他条件的批处理文件,并且已经搜索了很多但是我的工作不正常。我希望文件检查是否存在两个文件,如果存在,则打开其中一个文件。如果两个文件中的一个不存在,则批处理应比较接下来的两个文件。我的文件看起来像这样:

IF EXIST "file1.txt" IF EXIST "file2.txt" Goto V1

IF EXIST "file3.txt" IF EXIST "file4.txt" Goto V2

IF EXIST "file5.txt" AND IF EXIST "file6.txt" Goto V3

:V1
cd "folder"
start sample.exe
goto commonexit

:V2
cd "folder2"
start sample2.exe
goto commonexit

:V3
cd "folder3"
start sample3.exe
goto commonexit

:commonexit

像这样,cmd打开并立即关闭。当我注释掉":commonexit"它打开并通过代码工作但似乎在双IF条件下(IF ... IF ...)它只关心第二个IF。在它们之间放置一个AND运算符并没有帮助。

你们有谁猜,有什么不对吗?

编辑::commonexit正在运行。我只是不知道以后的断线:commonexit会使代码损坏。

2 个答案:

答案 0 :(得分:1)

这是一种方式:

@echo  off
if exist "file1.txt" if exist "file2.txt" (
cd "folder"
start sample.exe
goto :EOF
)

if exist "file3.txt" if exist "file4.txt" (
cd "folder2"
start sample2.exe
goto :EOF
)

if exist "file5.txt" if exist "file6.txt" (
cd "folder3"
start sample3.exe
goto :EOF
)

这是逻辑: 检查file1是否存在,如果存在则检查file2是否存在,如果存在,cd,执行样本,然后goto文件结束。但是,如果file1file2不存在,它将跳过当前代码块并转到if的下一行

答案 1 :(得分:1)

更简单,更接近原始代码:

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文件名”测试上编写一个有效的“AND”操作,并以类似于几个“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

此方法基于for /F命令返回的“ExitCode”值,如this answer退出代码管理部分下方)所述。只需插入附加文件名,将“skip = 1”值调整为文件数减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