Что нового

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

joiner

Модератор
Локальный модератор
Сообщения
3,570
Репутация
632
при запуске команды
Код:
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")

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

joiner

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

AZJIO

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

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

joiner

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

joiner

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

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,570
Репутация
632
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
вобщем недодел...пока.
 
Верх