2015-06-05 3 views
0

Я пытаюсь создать скрипт, который будет проверять, существует ли папка X, а затем проверить, не существует ли папки Y перед выполнением кода.Можно ли запустить оператор «If» в другом выражении «If»?

По сути вот что я пытаюсь выполнить:

If "X" folder exists Then 
    If "Y" folder doesn't exist Then 
    Create "Y" folder 
    Create Message box 
    Run "Z" CMD file 
IF "X" folder doesn't exist Then 
    Create "Y" folder 
If both "X" and "Y" folder exist then 
    Do Nothing 
End IF 

Примечание: Проблема у меня в том, что я могу заставить его сделать вариацию 2 из 3 If заявления, но не все 3 работают по своему желанию. Вот сценарий, который я использую сейчас. Я пробовал использовать Else/ElseIf, а также просто не могу заставить их работать. Вот сценарий, который я использую сейчас:

Set WshShell = CreateObject("Wscript.Shell") 
vAPPDATA = WshShell.ExpandEnvironmentStrings("%APPDATA%") 
Set objFSO = CreateObject("Scripting.FileSystemObject") 
If Not objFSO.FolderExists(vAPPDATA & "\Mozilla\Firefox") Then 
    objFSO.CreateFolder(vAPPDATA & "\Mozilla\Update1") 
    End If 
If objFSO.FolderExists(vAPPDATA & "\Mozilla\Firefox") Then 
    If Not objFSO.FolderExists(vAPPDATA & "\Mozilla\Update1") Then 
     objFSO.CreateFolder(vAPPDATA & "\Mozilla\Update1") 
     x=msgbox("Firefox has been updated and will need to close and reopen to import your profile." ,0, "Firefox Has Been Updated!") 
     Dim objShell 
     Set objShell = CreateObject("WScript.Shell") 
     objshell.run (VAPPDATA & "\test.cmd") 
     End If 
    If objFSO.FolderExists(vAPPDATA & "\Mozilla\Update1") Then 
     End If 
    End IF 

ответ

2

Да, VBScript поддерживает условия вложенности. Однако ваша логика кажется неполной (и излишне запутанной) для меня. Ваше второе «внешнее» состояние

IF "X" folder doesn't exist Then 

делает создание папки Y зависит только от того, что X не существует, что является данным в данный момент в вашем коде, так как первое условие ("X" folder exists) оценивается в False. Проверяется Y не будет существовать больше смысла в этой точке:

Set fso = CreateObject("Scripting.FileSystemObject") 

If fso.FolderExists("X") Then 
    If Not fso.FolderExists("Y") Then 
    fso.CreateFolder "Y" 
    MsgBox ... 
    CreateObject("WScript.Shell").Run "Z" 
    End If 
ElseIf Not fso.FolderExists("Y") Then 
    fso.CreateFolder "Y" 
End If 

«Ничего не делать» является неявным по умолчанию, когда нет Else ветви и данные условия не выполняются, так что вы не Для этого не нужен явный код.

С учетом сказанного, можно упростить код, переключая условия, так как обе главные ветви создают Y, если папка не существует, но выполнить другой код, только если X существует:

If Not fso.FolderExists("Y") Then 
    fso.CreateFolder "Y" 
    If fso.FolderExists("X") Then 
    MsgBox ... 
    CreateObject("WScript.Shell").Run "Z" 
    End If 
End If 
Смежные вопросы