Что нового

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

joiner

Модератор
Локальный модератор
Сообщения
3 338
Репутация
574
при запуске команды
Код:
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
Репутация
658
Переменная $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 338
Репутация
574
Zaramot
и в этом случае результат нулевой
 

AZJIO

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

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

joiner

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

Zaramot

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

joiner

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

Zaramot

I ♥ AutoIt
Сообщения
1 160
Репутация
658
чтобы дос окно не мигало сделал так
Лучше так:
Код:
$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 338
Репутация
574
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
вобщем недодел...пока.
 
Верх