У меня есть файл Excel с большим количеством имен ПК на сервере, я хочу выполнить команду "systeminfo" и извлечь из нее ОС.Затем ОС автоматически помещается в ячейку Excel.Для этого я использовал следующие коды соответственно в файле VBA и командном файле.однако всякий раз, когда сервер не может связаться с ПК, окно cmd застревает, пока я не закрою его вручную.Поскольку список на самом деле состоит из 148 имен, знание способа автоматического закрытия этих Windows, скажем, через 8 секунд было бы очень полезно.
Я попытался найти путь к многопоточному VBA, просто чтобы выяснить, что это однопоточный язык.Затем я попытался запустить другой пакетный файл с тем, который я на самом деле использую, чтобы принудительно уничтожить его после определенного периода времени, но кажется, что второй пакет запускается только после завершения первого, что делает его бесполезным.
VBA
Sub Test()
'
' Test Macro
' I'm not an expert in VBA, I just picked it up for this task, so a lot of code will result redundant. Bear with me
'
'
Dim i As Integer
'a is basically i-1.
a = 1
' I needed 148 cells for the project
Dim models(1 To 147) As String
For i = 2 To 148
models(a) = Cells(i, 3).Value
a = a + 1
Next i
a = 1
For i = 2 To 148
'not totally sure what the next five lines actually do, but "metodo" is the name of the batch file.
Dim strShellCommand As String
strShellCommand = "C:\Users\Administrator\Desktop\metodo.bat " + models(a)
Set oSh = CreateObject("WScript.Shell")
Set oEx = oSh.Exec(strShellCommand)
strBuf = oEx.StdOut.readAll
'I took out of the string everything that wasn't purely the OS name
Dim FinalString As String
FinalString = Right(strBuf, 26)
FinalString = Left(FinalString, 25)
'this is the line that prints the OS names into Excel cells
ActiveSheet.Cells(i, 10) = FinalString
a = a + 1
Next i
End Sub
тогда есть пакетный файл
set nome=%1
shift
systeminfo /s %nome% |findstr /c:"Microsoft Windows "