Что нового

Ключи компиляции скрипта, ошибка в указании пути к файлу

joiner

Модератор
Локальный модератор
Сообщения
3,464
Репутация
609
при запуске команды
Код:
Run("Aut2exe.exe /in join.au3")

происходит компиляция скрипта. проверил, все работает.
эту команду я хочу включить в основной скрипт. при этом пути к компилируемому фалу получаю из переменных. то есть так
Код:
$h_File = FileOpen(@ScriptDir & "\" & $sFolderName & "\join.au3", 2)
	FileWrite($h_File, $s_Script)
	FileClose($h_File)
	$i_Pid = Run("Aut2exe.exe /in" & @ScriptDir & "\" &  $sFolderName  &  "\join.au3")

я привел последний вариант своих мучений. не появляется никакой ошибки. просто нет компиляции.
инструменты компиляции находятся в одной папке с исполняемым скриптом
 

Zaramot

I ♥ AutoIt
Сообщения
1,160
Репутация
660
Переменная $sFolderName или макрос @ScriptDir могут содержать русские буквы или пробел(ы)
Код:
$h_File = FileOpen(@ScriptDir & "\" & $sFolderName & "\join.au3", 2)
FileWrite($h_File, $s_Script)
FileClose($h_File)
$i_Pid = Run("Aut2exe.exe /in" & FileGetShortName(@ScriptDir & "\" &  $sFolderName  &  "\join.au3"))
 
Автор
joiner

joiner

Модератор
Локальный модератор
Сообщения
3,464
Репутация
609
Zaramot
и в этом случае результат нулевой
 

AZJIO

Меценат
Меценат
Сообщения
2,803
Репутация
1,165
Александр
1. Если ком-строку отправить в MsgBox, то видим, что путь прилип к параметру /in, чего нет в первом варианте.
2. Путь обрамить кавычками
Код:
$i_Pid = Run('Aut2exe.exe /in "' & @ScriptDir & '\' &  $sFolderName  &  '\join.au3"')

Работу скрипта не проверял...
 
Автор
joiner

joiner

Модератор
Локальный модератор
Сообщения
3,464
Репутация
609
вобщем получается через батник с использование короткого имени файла
Код:
Aut2exe.exe /in C:\DOCUME~1\C7FE~1\0016~1\C20F~1\AVI_S1~1\join.au3
почему это не срабатывает в скрипте? ведь там я получаю такую же строку. проверил
 

Zaramot

I ♥ AutoIt
Сообщения
1,160
Репутация
660
А так ?
Код:
$i_Pid = Run(@Comspec & " /C start Aut2exe.exe /in " & FileGetShortName(@ScriptDir & "\" &  $sFolderName  &  "\join.au3"))
 
Автор
joiner

joiner

Модератор
Локальный модератор
Сообщения
3,464
Репутация
609
да, так получается. чтобы дос окно не мигало сделал так
Код:
$i_Pid = _RunDOS(@Comspec & " /C start Aut2exe.exe /in " & FileGetShortName(@ScriptDir & "\" &  $sFolderName  &  "\join.au3"))
 

Zaramot

I ♥ AutoIt
Сообщения
1,160
Репутация
660
чтобы дос окно не мигало сделал так
Лучше так:
Код:
$i_Pid = Run(@Comspec & " /C start Aut2exe.exe /in " & FileGetShortName(@ScriptDir & "\" &  $sFolderName  &  "\join.au3"), '', @SW_HIDE)

Лишнею библиотеку не нужно подключать.
 

SyDr

Сидра
Сообщения
651
Репутация
158
Александр
Пути, содержащие пробелы, необходимо заключать в двойные кавычки:
Код:
$h_File = FileOpen(@ScriptDir & "\" & $sFolderName & "\join.au3", 2)
    FileWrite($h_File, $s_Script)
    FileClose($h_File)
    $i_Pid = Run('Aut2exe.exe /in "' & @ScriptDir & "\" &  $sFolderName  &  '\join.au3"')

Ну и после ключа /in нужен был пробел.
Ну и ещё, Aut2exe.exe должен при таком подходе находится в текущем рабочем каталоге (обычно @ScriptDir)
 
Автор
joiner

joiner

Модератор
Локальный модератор
Сообщения
3,464
Репутация
609
SyDr
AZJIO уже обращал на это внимание..но не работает.
последний вариант Zaramotа работает. привожу весь скрипт, чтобы было наглядно. он не мой, склеен из функций с форума. я склеивал ....:smile:да к тому же черновой вариант.
Код:
#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <Process.au3>
Global $razmer, $sFolderName, $sNewName, $Combo1, $sFile
$Form1 = GUICreate("Прозектор", 447, 147, 192, 124)
$Input1 = GUICtrlCreateInput("", 8, 48, 377, 21)
$Button1 = GUICtrlCreateButton(".....", 400, 48, 35, 25)
$Label1 = GUICtrlCreateLabel("Размер:", 176, 24, 46, 17)
$Combo1 = GUICtrlCreateCombo("", 16, 104, 57, 25, BitOR($CBS_DROPDOWN, $CBS_AUTOHSCROLL))
GUICtrlSetData($Combo1, "1|2|3|4|5|6|7|8|9|10", 1)
$Label2 = GUICtrlCreateLabel("Исходный файл", 8, 24, 92, 17)
$size = GUICtrlCreateLabel("", 240, 24, 110, 17)
$Label4 = GUICtrlCreateLabel("На сколько делим?", 16, 80, 104, 17)
$Button2 = GUICtrlCreateButton("Разделить", 136, 104, 91, 25)
$Button3 = GUICtrlCreateButton("Прервать", 296, 104, 91, 25)
GUISetState(@SW_SHOW)

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $Button1
			$Path = FileOpenDialog('', '', '(*.*)')
			$razmer = FileGetSize($Path)
			GUICtrlSetData($Input1, $Path)
			GUICtrlSetData($size, $razmer)
		Case $Button2
			GUICtrlSetState($Button2, $GUI_DISABLE)
			_delim()
			_script_compile()
			GUICtrlSetState($Button2, $GUI_ENABLE)
		Case $Button3

	EndSwitch
WEnd

Func _delim()
	$sFile = GUICtrlRead($Input1, 1)
	If FileExists($sFile) Then
		$iPart = GUICtrlRead($Combo1, 1)
		$iMaxRead = 1024 * 1024 * 1
		$sFolderName = StringRegExpReplace($sFile, '^.*\.', '') & '_' & StringRegExpReplace($sFile, '.*\\|\.[^.]*$', '')
		$sNewName = StringRegExpReplace($sFile, '.*\\|\.[^.]*$', '')
		$iSize = FileGetSize($sFile)
		$iPartSize = Ceiling($iSize / $iPart)
		If $iMaxRead > $iPartSize Then $iMaxRead = $iPartSize
		$hFile = FileOpen($sFile, 16)
		For $i = 1 To $iPart
			$hTempFile = FileOpen(@ScriptDir & '\' & $sFolderName & '\' & $i & '_' & $sNewName & '.xyz', 26)
			$iSizeRead = 0
			$iRead = $iMaxRead
			While $iSizeRead < $iPartSize
				$sTempText = FileRead($hFile, $iRead)
				FileWrite($hTempFile, $sTempText)
				$iSizeRead += $iRead
				If $iRead > $iPartSize - $iSizeRead Then $iRead = $iPartSize - $iSizeRead
			WEnd
			FileClose($hTempFile)
		Next
		FileClose($hFile)
	Else
		SetError(0)
	EndIf
EndFunc   ;==>_delim

Func _join()
	$iMaxRead = 1024 * 1024 * 1
	$sFile = GUICtrlRead($Input1, 1)
	$iPart = Number(GUICtrlRead($Combo1, 1))
	If Not $iPart Or Not $sFile Then
		MsgBox(16, 'ошибка', 'нечего соединять')
		Exit
	EndIf
	$sName = StringRegExpReplace($sFile, '.*\\|\.[^.]*$', '')
	$hFile = FileOpen(@ScriptDir & '\' & $sFile, 17)
	For $i = 1 To $iPart
		$iError = 0
		$hTempFile = FileOpen(@ScriptDir & '\' & $i & '_' & $sName & '.xyz', 16)
		While $iError <> -1
			$sTempText = FileRead($hTempFile, $iMaxRead)
			$iError = @error
			FileWrite($hFile, $sTempText)
		WEnd
		FileClose($hTempFile)
	Next
	FileClose($hFile)
EndFunc   ;==>_join

Func _script_compile()
	Local $i_Pid
	Local $s_Script = "#NoTrayIcon" & @CRLF & _
			"$iMaxRead = 1024 * 1024 * 1" & @CRLF & _
			"$sFile =" & """" & StringRegExpReplace($sFile, '^.*\\', '') & """" & @CRLF & _
			"$iPart =" & Number(GUICtrlRead($Combo1, 1)) & @CRLF & _
			"If Not $iPart Or Not $sFile Then" & @CRLF & _
			"MsgBox(16, 'Error', 'Error')" & @CRLF & _
			"Exit" & @CRLF & _
			"EndIf" & @CRLF & _
			"$sName = StringRegExpReplace($sFile, '.*\\|\.[^.]*$', '')" & @CRLF & _
			"$hFile = FileOpen(@ScriptDir & '\' & $sFile, 17)" & @CRLF & _
			"For $i = 1 To $iPart" & @CRLF & _
			"$iError = 0" & @CRLF & _
			"$hTempFile = FileOpen(@ScriptDir & '\' & $i & '_' & $sName & '.xyz', 16)" & @CRLF & _
			"While $iError <> -1" & @CRLF & _
			"$sTempText = FileRead($hTempFile, $iMaxRead)" & @CRLF & _
			"$iError = @error" & @CRLF & _
			"FileWrite($hFile, $sTempText)" & @CRLF & _
			"WEnd" & @CRLF & _
			"FileClose($hTempFile)" & @CRLF & _
			"Next" & @CRLF & _
			"FileClose($hFile)"
	$h_File = FileOpen(@ScriptDir & "\" & $sFolderName & "\join.au3", 2)
	FileWrite($h_File, $s_Script)
	FileClose($h_File)
	Sleep(2000)
	$i_Pid = Run(@ComSpec & " /C start Aut2exe.exe /in " & FileGetShortName(@ScriptDir & "\" & $sFolderName & "\join.au3"), '', @SW_HIDE)
	Return $i_Pid
EndFunc   ;==>_script_compile
вобщем недодел...пока.
 
Верх