批处理文件 - 使用多个IF分隔

时间:2013-01-01 12:40:50

标签: batch-file batch-processing cmd

我正在编写一个批处理脚本,我正在寻找的东西可以让多个hings相互比较

例如,如果有以下文件,我必须查看文件夹以检查所有文件是什么

  abc.wxs
  verify.wxs
  start.wxs
  myname.wxs

我想去

 makeadmin

否则如果有

  abc.wxs
  verify.wxs
  start.wxs
  myname.wxs
  verifyme.wxs
  abc.dll

我写了一些像

这样的东西
IF EXIST "abc.wxs" (
IF EXIST "verify.wxs" (
IF EXIST "start.wxs" (
IF EXIST "myname.wxs" (
goto makeadmin
) else (
echo 1
 )
 ) else (
 echo 2
)
) else (
echo 3
)    
) else (
echo 4
)

现在我如何整合第二部分

1 个答案:

答案 0 :(得分:2)

您可以使用“检查缓冲区”执行此操作。我的意思是每个文件将计数+1到check变量。现在,如果总和与已检查文件的数量相匹配,它将执行特定的操作。 看看下面:

@echo off
set sum=0

IF EXIST "abc.wxs" (
set /a sum=%sum%+1
)
IF EXIST "verify.wxs" (
set /a sum=%sum%+1
)
IF EXIST "start.wxs" (
set /a sum=%sum%+1
)
IF EXIST "myname.wxs" (
set /a sum=%sum%+1
)
IF EXIST "verifyme.wxs" (
set /a sum=%sum%+1
)
IF EXIST "abc.dll" (
set /a sum=%sum%+1
)

if sum==4 (
set sum=0
goto makeadmin
)
if sum==6 (
set sum=0
<insert whatever you want here>
)

pause

通常,我发现使用带数字的计数器非常有用。这对我来说更方便。我希望它有所帮助。

PS 我在2“if”s的每个案例中设置sum = 0因为我没有测试过这个(因为我现在在linux上)而且我担心如果你回到程序的开头,你将会超过数字6。

修改
通过使用FOR循环可以缩短上述内容并使其更易于维护。此外,IF中不需要set sum=0。最后,变量不需要在SET / A中扩展。 set /a sum=sum+1set /a sum+=1

一样有效
@echo off
set sum=0
for %%F in (
  abc.wxs
  verify.wxs
  start.wxs
  myname.wxs
  verifyme.wxs
  abc.dll
) do if exist %%F set /a sum+=1
if sum==4 goto makeadmin
if sum==6 REM do something else