2013-01-01 32 views
0

我寫一個批處理腳本我所尋找的是什麼,以便多個hings相互批處理文件 - 使用多個IF的分離

例如,我要看看文件夾來檢查什麼的所有文件進行比較在那裏,如果有下列文件

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

您的問題的邏輯是沒有意義的。你說你想實現像''的邏輯,如果A然後x否則如果A和B然後y''。但是'A&B'只有當'A'爲真時纔是真的。第二個條件永遠不能執行!如果第一個IF爲假,那麼第二個IF爲假。如果第一個IF是真的,那麼第二個IF可能是真的,但由於ELSE它永遠不會執行。此外,您需要通過點擊答案左上角附近的複選標記來學習接受解決您的問題的最佳答案。 – dbenham

回答

2

您可以使用「檢查緩衝區」做到這一點。我的意思是每個文件都會對檢查變量進行+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.因爲我沒有測試過這個(因爲我現在在linux上),所以我對每個2「if」的case設置sum = 0,我擔心如果你回到程序的開始, LL將不得不總和過超過數6

EDIT
上面可以縮短,更容易通過使用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

+1,技術上不是OP所要求的,但OP的問題的邏輯是沒有意義的。我喜歡你對OP的意圖的解釋。我冒昧地編輯你的答案,以表明如何縮短和便於維護。 – dbenham