2015-12-24 2 views
0

У меня есть пакетный файл, который запускает telnet-сервер и останавливает сервер telnet со временем сна между ними.Время выполнения команд командного файла скриптов VB без использования WScript.sleep

Сценарий:

set OBJECT=WScript.CreateObject("WScript.Shell") 
WScript.sleep 5000 
OBJECT.SendKeys "net stop TlntSvr{ENTER}" 
WScript.sleep 30000 
OBJECT.SendKeys "net start TlntSvr{ENTER}" 
WScript.sleep 30000 
OBJECT.SendKeys "exit" 

Как вы видите выше код остановки телнет услуги с помощью net stop TlntSvr, а затем запускает службы телнет с помощью net start TlntSvr с временем ожидания между как WScript.sleep 3000.

Выпуск: Теперь мне нужно запустить этот пакетный файл в нескольких системах ПК/ноутбук и в каждом случае выполнения, время, необходимое для запуска/остановки телнет услуги/обслуживание телнет установка меняется и, следовательно, I должен был изменять время сна каждый раз, когда я запускаю скрипт в разных системах.

Вопрос: Есть ли способ, ко времени следующего выполнения такой, что как только первое исполнение завершается только тогда он начнет следующий выполнение? Значение: мне не нужно настраивать время сна для каждого ноутбука/ПК, следующее исполнение будет запускаться только тогда, когда первое исполнение будет выполнено в соответствии с собственным поведением каждого ПК.

+0

Что делать, если vbscript выводит файл флага и петли летучей мыши, пока не увидит этот файл? –

+0

Я не понимаю, что вы делаете. Пакетные файлы являются последовательной обработкой. Следующая команда не выполняется до тех пор, пока не завершится предыдущая команда. – Squashman

+0

Sqaushman - Я выполняю автоматизацию FTP и UDP с помощью VBscript. Из-за большого количества vbscripts и пакетных файлов некоторые команды (например, выше) выполняются последовательно. Теперь, если время ожидания между двумя последовательными командами не синхронизировано, можно совместить другое. Поэтому я хочу, чтобы время последовательного выполнения было таким, что следующая команда будет запускаться только тогда, когда предыдущая команда заканчивается без использования 'WScript.sleep

ответ

0

Что вы показываете не командные командные файлы. Если вы хотите партии, чтобы сделать это, то ниже эквивалентно:

Net Stop TlnSvr 
PING -n 31 127.0.0.1>nul 
Net Start TlnSvr 
PING -n 31 127.0.0.1>nul 

Однако пакетные команды являются последовательными и, если все, что вам нужно для каждой команды, чтобы закончить, прежде чем двигаться дальше, то вы можете просто удалить задержки Ping ,

Net Stop TlnSvr 
Net Start TlnSvr 

Мы по-прежнему использовать некоторые Пакетные файлы отчасти потому, что мы должны иметь много различных команд выполняются последовательно и убедитесь, что один будет сделано до следующего пинает.

Если я пропустил лодку, прокомментируйте, и я отредактирую это.

Редактировать: Последующие комментарии.

В VBscript вы можете поймать дату/время в момент выполнения первой команды, а затем следить за датой/временем между командами, чтобы обеспечить правильное время.

Dim TimeDif: TimeDif = 40 'seconds 
Dim CmdTime: CmdTime = now() 
'... do your first command here... 
do while datediff("S", CmdTime, now()) < TimeDif 
    wscript.sleep(5000) '5 seconds 
loop 
'... do your second command here... 

Теперь таймер учитывает время выполнения команды, а не только время статического времени между командами.

Установите TimeDif в качестве команды. Начать следующую команду. Начать разницу в секундах.

Редактировать: Этот изящный. Нет петли. Он вычисляет разницу во времени и спит в это время.

Dim TimeDif: TimeDif = 30 'seconds 
Dim CmdTime: CmdTime = now() 
Dim ToNext 
'... do your first command here... 
ToNext = (TimeDif * datediff("S", CmdTime, now())) * 1000 
wscript.sleep(ToNext) 
'... do your second command here... 
+0

Проблема, с которой я столкнулась, - это что-то еще. Скажем для ** любых таких команд партии **, каждое исполнение каждой команды выполняется разным образом на каждой рабочей станции. Скажем ** команда 1 ** принимает ** 24 секунды ** для выполнения в ** системе A **, тогда как одна и та же команда принимает ** 1 мин ** для выполнения в ** системе B ** из-за скорости/производительности системы , Поэтому вместо того, чтобы настраивать время ожидания снова и снова в соответствии с потребностями, сценарий сам будет решать, когда начинать следующую команду. Можно ли это сделать программно? –

+0

Не независимо от того, что вы пытаетесь сделать, это синхронизировать выполнение каждой системы, чтобы они запускались одновременно (что, я думаю, я читаю). Если время, которое ему нужно выполнить, достаточно длинное, вы можете приблизиться, используя триггерный файл (семафор), который все ищут. Я отредактирую свой пост, чтобы показать что-то подобное. – RLH

+0

Нет. Я не хочу синхронизировать выполнение, но я хочу, чтобы скрипт сам решал, когда начинать вторую команду, когда первый закончен. Скажем, команда: ** net stop TlnSvr ** ** sleep 40 secs ** ** net start TlnSvr **, но команда занимает 5 секунд в ** системе A ** только для выполнения, но поскольку время сна составляет 40, мне пришлось подождите 35 секунд, что является пустой тратой времени. –

Смежные вопросы