Что нового

[Автоматизация] Запуск серии скриптов из одного скрипта

Fedorvv

Новичок
Сообщения
2
Репутация
0
Здравствуйте. Подскажите, какой код нужно написать, чтобы из тела скрипта запускался другой скрипт (один или несколько)? простой Run с указанием пути к скрипту не работает.
Спасибо
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Fedorvv,
Запускаемые скрипты скомпилированы или нет?
 

erlik

Продвинутый
Сообщения
317
Репутация
84
простой
Код:
Run
с указанием пути к скрипту не работает
Естественно. Читайте справку прежде чем что то делать. Run работает только с программами, которые запускаются исполняются непосредственно системой (EXE, BAT, COM, или PIF). Скрипт au3 не является автономной программой, так как запускается исполняется интерпретатором AutoIt3.exe. В этом случае в Run нужно передавать и путь до скрипта, и путь до интерпретатора.
Другой вариант:
Код:
ShellExecute()
Читайте справку - она не на китайском.
 

Z_Lenar

Продвинутый
Сообщения
209
Репутация
52
Fedorvv
Код:
; Скрипт запускает себя (@ScriptFullPath)
$hChild = Run(@AutoItExe & ' /AutoIt3ExecuteScript "' & @ScriptFullPath & '"')

Если скомпилировать то скрипты будут запускаться с помощью интерпритатора который встроен в скомпилированный файл

ЗЫ. С первым апреля (хотя он и был давно) ;D
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
Fedorvv [?]
Здравствуйте. Подскажите, какой код нужно написать, чтобы из тела скрипта запускался другой скрипт (один или несколько)? простой Run с указанием пути к скрипту не работает.Спасибо
Как вариант:
Код:
#Region __ScriptInit
Local Const $__sDefScriptPattern = '/(?i)scriptname="([^"]+)'
; ---
Local $__sCurScriptTmp = StringRegExpReplace( $CmdLineRaw, '^.*' & $__sDefScriptPattern & '.*$', '\1' ), $__fCurScriptErr = ( @Extended = 0 )
If $__fCurScriptErr Then _
	$__sCurScriptTmp = "default"

Local Const $sCurScriptName = $__sCurScriptTmp
; -
Func __RunSelfScript( $sName = "default" )
	Local $sRunLine = $CmdLineRaw, $sCmdScriptName = '/scriptname="' & $sName & '"'
	; ---
	If $__fCurScriptErr Then
		$sRunLine &= ' /scriptname="' & $sName & '"'
	Else
		$sRunLine = StringRegExpReplace( $sRunLine, $__sDefScriptPattern, $sCmdScriptName )
	EndIf

	Return Run( @ScriptFullPath & ' ' & $sRunLine, @ScriptDir )
EndFunc
#EndRegion __ScriptInit


If $sCurScriptName = "default" Then ;Скрипт по умолчанию
	__RunSelfScript( "script_2" )
	; ---
	MsgBox( 64, "", "Script 2 now started!" )
ElseIf $sCurScriptName = "script_2" Then
	MsgBox( 64, "", "I am second script..." )
Else
	MsgBox( 16, "Error", "Script not found!" )
EndIf


Константа $sCurScriptName будет содержать "имя" запущенного скрипта. Если же скрипт был запущен пользователем ( не функцией __RunSelfScript ) - то "имя" будет default.

P.S. Скрипт нужно скомпилировать.
 

Ksaan

Знающий
Сообщения
207
Репутация
15
Код:
Func _Script()
ShellExecute( @ScriptDir &
'\Script2.au3' )
Exit
EndFunc
 
Верх