【问题标题】:Batch file - using multiple IF's to separate批处理文件 - 使用多个 IF 来分隔
【发布时间】:2013-01-01 12:40:49
【问题描述】:

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

例如,如果有以下文件,我必须查看文件夹以检查所有文件都有哪些

  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
)

现在我如何整合第二部分

【问题讨论】:

  • 你的问题的逻辑没有意义。你说你想实现像"if A then x else if A & B then y" 这样的逻辑。但A & B 只能在A 为真时为真。第二个条件永远无法执行!如果第一个 IF 为假,那么第二个 IF 也为假。如果第一个 IF 为真,那么第二个 IF 可能为真,但由于 ELSE,它永远不会执行。此外,您需要通过单击答案左上角附近的复选标记来学习接受能够解决您的问题的最佳答案。

标签: batch-file batch-processing cmd


【解决方案1】:

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

@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

一般来说,我发现使用带有数字的计数器非常有用。对我来说方便多了。希望对你有帮助。

P.S. 我在 2 个“if”的每个情况下都设置 sum=0,因为我还没有测试过这个(因为我现在在 linux 上),我担心如果你回到程序的开头,总和将超过数字 6。

编辑
通过使用 FOR 循环,可以缩短上述内容并使其更易于维护。此外,IF 中不需要set sum=0。最后,变量不需要在 SET /A 中扩展。 set /a sum=sum+1 有效,set /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

【讨论】:

  • +1,从技术上讲,这不是 OP 所要求的,但 OP 问题的逻辑是没有意义的。我喜欢你对 OP 意图的解释。我冒昧地编辑了您的答案,以展示如何缩短它并使其更易于维护。
猜你喜欢
  • 1970-01-01
  • 2011-08-28
  • 1970-01-01
  • 1970-01-01
  • 2021-01-31
  • 2017-01-14
  • 1970-01-01
  • 2012-12-18
  • 1970-01-01
相关资源
最近更新 更多