У меня есть этот сценарий, и мне нужно его завершить (автозапуск или самоубийство, а также закрыть wscript.exe) после запуска .bat

On Error Resume next
If WScript.Arguments.Named.Exists("elevated") = False Then
      'Launch the script again as administrator
       CreateObject("Shell.Application").ShellExecute "wscript.exe", """" & WScript.ScriptFullName & """ /elevated", "", "runas", 1
       WScript.Quit
Else
      'Change the working directory from the system32 folder back to the script's folder.
      Set oShell = CreateObject("WScript.Shell")
      oShell.CurrentDirectory = CreateObject("Scripting.FileSystemObject").GetParentFolderName(WScript.ScriptFullName)

End If

Dim Fso
Set Fso = WScript.CreateObject("Scripting.FileSystemObject")
set objshell = createobject("wscript.shell")

homedrive = objshell.ExpandEnvironmentStrings( "%HOMEDRIVE%" )

SCRIPT = homedrive & "\test\bar.bat"
strPath = Wscript.ScriptFullName
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.GetFile(strPath)
strFolder = objFSO.GetParentFolderName(objFile)

NewPath = objFSO.BuildPath(strFolder, SCRIPT)
set objshell = createobject("wscript.shell")

objshell.Run (script),0,True

Неудачные попытки:

  • Я пытался с этим кодом, и он не работал
  • WScript.Выйти (в конце скрипта) и не получилось
  • Измените "true" на "False", и это не сработало

Есть идеи?

Обновление: Основная проблема заключается в том, что wscript.exe остается запущенным после запуска .vbs (это можно увидеть в диспетчере задач), и я не могу использовать команды cmd внутри .vbs или внутри .bat (taskkill /f /im "wscript .exe "/t), потому что .bat и .vbs закрыты

Если на мой вопрос нет ответа: я был бы признателен, если бы кто-нибудь сказал мне, как запустить .bat с помощью метода, который Windows распознает изначально (без установки зависимостей). Пожалуйста, исключите следующие методы:

  1. запустить .bat напрямую
  2. Запустите .bat с помощью ярлыка
  3. Конвертировать .bat в .exe
  4. Запустите .bat с .vbs

2 ответа2

1

Измените эту строку:

objshell.Run (script),1,True

Для того, чтобы:

objshell.Run (script),1,False

Это говорит VB не ждать, пока команда не вернется.

https://www.vbsedit.com/html/6f28899c-d653-4555-8a59-49640b0e32ea.asp

1

Попробуй это:

On Error Resume next
Set fso = CreateObject("Scripting.FileSystemObject")
set objshell = createobject("wscript.shell")

homedrive = objshell.ExpandEnvironmentStrings( "%HOMEDRIVE%" )

SCRIPT = homedrive & "\test\bar.bat"

If WScript.Arguments.Named.Exists("elevated") = False Then
    'Launch the script again as administrator
    CreateObject("Shell.Application").ShellExecute "wscript.exe", """" & WScript.ScriptFullName & """ /elevated", "", "runas", 1
    WScript.Quit
Else
    'Change the working directory from the system32 folder back to the script's folder.
    objShell.CurrentDirectory = fso.GetParentFolderName(WScript.ScriptFullName)
End If

objshell.Run (script),0,False

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .