#shell #vbscript #pause
#оболочка #vbscript #пауза
Вопрос:
Я пытаюсь создать скрипт, который автоматически установит принтер. Я нашел некоторый код, который я изменил, чтобы выдавать пользователю некоторые подсказки. Я думаю, что оригинал был командным файлом. Есть 4 процесса, которые должны быть запущены для выполнения команды cscript. Это те, которые мне нужно приостановить до их завершения. Я думал, что опция WaitOnReturn в команде оболочки заставила бы их ждать, но это не так, я пометил их в коде «Нужно подождать здесь»…
Вот код.
Dim fso
Dim Folder
Dim ProgramPath
Dim WshShell
Dim ProgramArgs
Dim WaitOnReturn
Dim intWindowStyle
'Dim objShell
'strInput = UserInput( "Enter some input:" )
strInput = MsgBox("This will install the default HP Print driver?",1,"Windows 7 Print Driver Install")
'WScript.Echo "You entered: " amp; strIpAddress
If strInput = 2 Then
WScript.Echo "Please run again when you are ready"
Else '=1 Prompt for IP Address
'WScript.Echo "You entered: " amp; strInput
strIpCheck = MsgBox("Do you have the Printers IP Address?",1,"Choose options")
If strIpCheck = 2 Then 'Does not have IP Address
WScript.Echo "Please run again when have the IP Address"
Else 'Start install routine
strIpAddress = InputBox("Enter the IP Address", "IP Address")
Set WshShell = CreateObject("WScript.Shell")
'Create directories
Set FSO = CreateObject("Scripting.FileSystemObject")
If NOT (fso.FolderExists("C:DRIVERS")) Then
fso.CreateFolder("C:DRIVERS")
End If
If NOT (fso.FolderExists("C:SCRIPTS")) Then
fso.CreateFolder("C:SCRIPTS")
End If
'Location of Windows 7 HP print drivers
strSourceDriver = "C:WindowsSystem32DriverStoreFileRepositoryhpoa1so.inf_amd64_neutral_4f1a3f1015001339"
'Location of Win7 built in printer scripts
strSourceScripts = "C:WindowsSystem32Printing_Admin_Scriptsen-US"
If (fso.FolderExists(strSourceDriver)) Then
fso.copyFolder strSourceDriver, "C:DRIVERS"
End If
If (fso.FolderExists(strSourceScripts)) Then
fso.copyFolder strSourceScripts, "C:SCRIPTS"
End If
'Delete existing printer named HP Printer
ProgramPath = "C:SCRIPTSprnmngr.vbs"
ProgramArgs = "-d -p " amp; Chr(34) amp; "HP Printer" amp; Chr(34) amp; ""
intWindowStyle = 1
WaitOnReturn = true
WshShell.Run "cscript.exe " amp; Chr(34) amp; ProgramPath amp; Chr(34) amp; Space(1) amp; ProgramArgs, intWindowStyle, WaitOnReturn
'Need to wait here until the above shell process is done
ProgramPath = "C:SCRIPTSPrnport.vbs"
ProgramArgs = "-a -r " amp; strIpAddress amp; "Port -h " amp; strIpAddress amp; " -o raw -n 9100"
intWindowStyle = 1
WaitOnReturn = true
WshShell.Run "cscript.exe " amp; Chr(34) amp; ProgramPath amp; Chr(34) amp; Space(1) amp; ProgramArgs, intWindowStyle, WaitOnReturn
'Need to wait here until the above shell process is done
ProgramPath = "C:SCRIPTSPrndrvr.vbs"
ProgramArgs = "-a -m " amp; Chr(34) amp; "HP Photosmart C8100" amp; Chr(34) amp; "-i C:DRIVERShpoa1so.inf -h C:DRIVERS"
intWindowStyle = 1
WaitOnReturn = true
WshShell.Run "cscript.exe " amp; Chr(34) amp; ProgramPath amp; Chr(34) amp; Space(1) amp; ProgramArgs, intWindowStyle, WaitOnReturn
'Need to wait here until the above shell process is done
ProgramPath = "C:SCRIPTSPrnmngr.vbs"
ProgramArgs = "-a -p " amp; Chr(34) amp; "HP Printer" amp; Chr(34) amp; "-m" amp; Chr(34) amp; "HP Photosmart C8100" amp; Chr(34) amp; "-r " amp; strIpAddress
intWindowStyle = 1
WaitOnReturn = true
WshShell.Run "cscript.exe " amp; Chr(34) amp; ProgramPath amp; Chr(34) amp; Space(1) amp; ProgramArgs, intWindowStyle, WaitOnReturn
'Need to wait here until the above shell process is done
End If
End If
Ответ №1:
Всем WshShell.Run "cscript.exe " amp; …, intWindowStyle, WaitOnReturn
следует дождаться, пока вызванный процесс оболочки не завершит предоставление WaitOnReturn = true
. Однако выходные данные следующего упрощенного сценария (где назначения ProgramArgs
копируются ивставляются из исходного кода) показывают некоторые недостающие пробелы в предоставленных параметрах:
strIpAddress = "10.10.10.10"
ProgramArgs = "-d -p " amp; Chr(34) amp; "HP Printer" amp; Chr(34) amp; ""
Wscript.Echo ProgramArgs
ProgramArgs = "-a -r " amp; strIpAddress amp; "Port -h " amp; strIpAddress amp; " -o raw -n 9100"
Wscript.Echo ProgramArgs
ProgramArgs = "-a -m " amp; Chr(34) amp; "HP Photosmart C8100" amp; Chr(34) amp; "-i C:DRIVERShpoa1so.inf -h C:DRIVERS"
Wscript.Echo ProgramArgs
ProgramArgs = "-a -p " amp; Chr(34) amp; "HP Printer" amp; Chr(34) amp; "-m" amp; Chr(34) amp; "HP Photosmart C8100" amp; Chr(34) amp; "-r " amp; strIpAddress
Wscript.Echo ProgramArgs
Вывод: cscript D:batSO55303301.vbs
-d -p "HP Printer" -a -r 10.10.10.10Port -h 10.10.10.10 -o raw -n 9100 -a -m "HP Photosmart C8100"-i C:DRIVERShpoa1so.inf -h C:DRIVERS -a -p "HP Printer"-m"HP Photosmart C8100"-r 10.10.10.10
Более того, этот Run
метод возвращает целое число. Вы могли бы получить код возврата процесса в переменную RetCode
, а затем проверить, равно ли его значение нулю (когда все прошло нормально), используя
RetCode = WshShell.Run ( "cscript.exe " amp; _
Chr(34) amp; ProgramPath amp; Chr(34) amp; Space(1) amp; ProgramArgs _
, intWindowStyle, WaitOnReturn )
Комментарии:
1. Извините за задержку, я был в отпуске. Исправление пробелов и добавление повторного кода решили проблему. Я благодарю вас.