VBScript для каждого элемента в массиве L oop Code - PullRequest
0 голосов
/ 09 января 2020

Итак, у меня есть этот код, который я собрал и выполняю работу, но я пришел к выводу, что его можно еще больше оптимизировать с помощью For Each L oop и Array. Код запускает приложение HTA из командной строки и принимает два предварительно заданных параметра. Что я хочу сделать, и у меня возникли некоторые проблемы, так это свести к минимуму объем кода, поэтому единственное, что мне нужно было отредактировать, - это значения массива и сохранить все остальное в значительной степени c.

Пример того, что я пытаюсь выполнить sh (я знаю, что синтаксис неверен, просто пытаюсь нарисовать картинку):

Dim objShell, command
Set objShell = WScript.CreateObject ("WScript.Shell") 
command = "cmd /c wmic process where name=""mshta.exe"" call terminate"
objShell.Run command, 0, True 

Dim preMSI
preMSI = "MSI_"

Dim postMSI
postMSI = "_5"

Dim startPKG
startPKG = "Build"

Array(4O, AT, LQ)

ForEach ArrayValue (

 'Prep Name Change
 objShell.run "cmd.exe /C REN D:\"&startPKG&" "&firstArraryValue&"", 0, True
 'Launch and Execute Package Build
 objShell.run "D:\BUILDER.hta """&preMSI+Var1+postMSI&""" ""D:\"&Var1&""" ", 0, True
 objShell.Run command, 0, True 
'Rename the DIR from the first value to the second and so forth as it iterates
 objShell.run "cmd.exe /C REN D:\"&firstArraryValue&" "&secondArraryValue&"", 0, True

)

Мой фактический код:

Dim objShell, command
Set objShell = WScript.CreateObject ("WScript.Shell") 
command = "cmd /c wmic process where name=""mshta.exe"" call terminate"
objShell.Run command, 0, True 


Dim preMSI
preMSI = "MSI_"

Dim postMSI
postMSI = "_5"

Dim startPKG
startPKG = "Build"

 Dim Var1
 Var1 = "4O"

 'Prep Name Change
 objShell.run "cmd.exe /C REN D:\"&startPKG&" "&Var1&"", 0, True
 'Launch and Execute Package Build
 objShell.run "D:\BUILDER.hta """&preMSI+Var1+postMSI&""" ""D:\"&Var1&""" ", 0, True
 objShell.Run command, 0, True 

 Dim Var2
 Var2 = "AT"

 'Prep Name Change
 objShell.run "cmd.exe /C REN D:\"&Var1&" "&Var2&"", 0, True
 'Launch and Execute Package Build
 objShell.run "D:\BUILDER.hta """&preMSI+Var2+postMSI&""" ""D:\"&Var2&""" ", 0, True
 objShell.Run command, 0, True 

 Dim Var3
 Var3 = "LQ"

 'Prep Name Change
 objShell.run "cmd.exe /C REN D:\"&Var2&" "&Var3&"", 0, True
 'Launch and Execute Package Build
 objShell.run "D:\BUILDER.hta """&preMSI+Var3+postMSI&""" ""D:\"&Var3&""" ", 0, True
 objShell.Run command, 0, True 

1 Ответ

1 голос
/ 09 января 2020

Насколько я понимаю, то, что вы хотите сделать, близко к этому (очевидно, не проверено).

Я убрал все "запуска CMD.EXE для переименования папки " бит, есть намного лучшие способы сделать это. Я также использовал собственный интерфейс VBScript для WMI.

Option Explicit

Dim Shell, FSO, Locator, WMI, process, folder, item

Set Shell = CreateObject("WScript.Shell") 
Set FSO = CreateObject("Scripting.FileSystemObject")
Set Locator = CreateObject("WbemScripting.SWbemLocator")
Set WMI = Locator.ConnectServer(".", "ROOT\CIMV2")

' terminate all existing mstha processes
For Each process In WMI.ExecQuery("SELECT * FROM Win32_Process WHERE Name = 'mshta.exe'")
    process.terminate
Next

Set folder = FSO.GetFolder("D:\Build")

For Each item In Array("4O", "AT", "LQ")
    folder.Name = item
    Shell.run "D:\BUILDER.hta ""MSI_" & item & "_5"" """ & folder.Path & """", 0, True
Next

folder.Name = "Build"

Если список "4O", "AT", "LQ" предназначен для настройки, передайте его в качестве аргумента командной строки при вызове сценария:

cscript /nologo your.vbs "4O,AT,LQ"

и в сценарии

For Each item In Split(WScript.Arguments.Unnamed(0), ",")
    ' ...
Next
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...