Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Подставить переменную исходящего файла

Ответить
Настройки темы
[решено] Подставить переменную исходящего файла

Аватара для Tosyk

Старожил


Сообщения: 166
Благодарности: 0

Профиль | Отправить PM | Цитировать


Есть скрипт. Компилируем, получаем .exe. При перетаскивании файла на этот .exe должна выполняться команда:

convert.exe 1.tga -set colorspace RGB 1.png

где "-set colorspace RGB" — дополнительные параметры, а "1.tga" - входящий, "1.png" - выходящий файлы

срипт:
Код: Выделить весь код
#NoTrayIcon

$aFiles = _Get_Files()

_Convert($aFiles)

Func _Convert($a_Files)
    Local $s_nvdxt = 'convert.exe', $s_TempDir = @TempDir & '\_TempTex', $i_End, $s_File
    If Not FileExists($s_TempDir) Then
        If Not DirCreate($s_TempDir) Then Return SetError(1)
	EndIf
		
    If Not FileInstall('convert.exe', $s_nvdxt, 1) Then Return SetError(1)
		
    For $i = 1 To $a_Files[0]
        $i_End = RunWait('convert.exe' & $a_Files[$i] & '" -set colorspace RGB', '', @SW_HIDE)
        If $i_End Then Return SetError(1)
        ;FileMove($a_Files[$i], $s_TempDir, 1)
	Next
    ;FileDelete($s_TempDir & '\' & $s_nvdxt)
	;DirRemove ($s_TempDir, 1)
EndFunc   ;==>_Convert

Func _Get_Files()
    Local $aFiles[$CmdLine[0] + 1] = [$CmdLine[0]]

    For $i = 1 To $CmdLine[0]
        $aFiles[$i] = $CmdLine[$i]
    Next
    Return $aFiles
EndFunc   ;==>_Get_Files
проблема в том, что не указан исходящий файл в строке:
Код: Выделить весь код
$i_End = RunWait('convert.exe' & $a_Files[$i] & '" -set colorspace RGB', '', @SW_HIDE)
я не знаю как его указать, помогите пожалуйста

p.s: хочу сделать контекстные меню для быстрого доступа для конвертирования группы изображений

Отправлено: 05:34, 17-09-2012

 

Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Tosyk, воспользуйтесь функциями: _PathSplit для разбора имени файла на части и _PathMake для обратного слияния после замены расширения.
Это сообщение посчитали полезным следующие участники:

Отправлено: 06:43, 17-09-2012 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Аватара для Tosyk

Старожил


Сообщения: 166
Благодарности: 0

Профиль | Отправить PM | Цитировать


скрипт изначально не мой, для меня не совсем понятна природа некоторых элементов, поэтому для меня сложно сразу взять и использовать, в иной ситуации я бы наверное бы даже не спрашивал о помощи, но то, что вы показали очень даже имеет смысл, похоже на %1 в cmd. Получился такой скрипт:
Код: Выделить весь код
#NoTrayIcon
#include <File.au3>
#include <Array.au3>

$aFiles = _Get_Files()

_Convert($aFiles)

Func _Convert($a_Files)
	Local $szDrive, $szDir, $szFName, $szExt
	Local $PNGSplitPath = _PathSplit(@ScriptFullPath, $szDrive, $szDir, $szFName, $szExt)
	Local $PNGMakePath = _PathMake("c:", "\temp", "boot", "ini")
    Local $s_nvdxt = 'convert.exe', $s_TempDir = @TempDir & '\_TempTex', $i_End, $s_File
    If Not FileExists($s_TempDir) Then
        If Not DirCreate($s_TempDir) Then Return SetError(1)
	EndIf
		
    If Not FileInstall('convert.exe', $s_nvdxt, 1) Then Return SetError(1)
		
    For $i = 1 To $a_Files[0]
        $i_End = RunWait('convert.exe' & $a_Files[$i] & '" -set colorspace RGB' & $szDrive & $szDir & $szFName '.png', '', @SW_HIDE)
        If $i_End Then Return SetError(1)
        ;FileMove($a_Files[$i], $s_TempDir, 1)
	Next
    ;FileDelete($s_TempDir & '\' & $s_nvdxt)
	;DirRemove ($s_TempDir, 1)
EndFunc   ;==>_Convert

Func _Get_Files()
    Local $aFiles[$CmdLine[0] + 1] = [$CmdLine[0]]

    For $i = 1 To $CmdLine[0]
        $aFiles[$i] = $CmdLine[$i]
    Next
    Return $aFiles
EndFunc   ;==>_Get_Files
но не работает, ибо не воспользовался функцией _PathMake, не совсем понимаю как ей воспользоваться

объясните пожалуйста

Отправлено: 07:46, 17-09-2012 | #3


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Не разбирался с Вашим кодом.

Разбираете и собираете здесь:
Код: Выделить весь код
	Local $PNGSplitPath = _PathSplit(@ScriptFullPath, $szDrive, $szDir, $szFName, $szExt)
	Local $PNGMakePath = _PathMake($szDrive, $szDir, $szFName, "png")
а вот сюда:
Код: Выделить весь код
        $i_End = RunWait('convert.exe' & $a_Files[$i] & '" -set colorspace RGB ' & $szDrive & $szDir & $szFName '.png', '', @SW_HIDE)
подставляете переменную «$PNGMakePath» (и что-то у Вас тут с кавычками как-то не так).

Отправлено: 08:34, 17-09-2012 | #4


Аватара для Tosyk

Старожил


Сообщения: 166
Благодарности: 0

Профиль | Отправить PM | Цитировать


хм, вроде всё понятно, должно работать, но не работает, странно.
взял за основу другой похожий свой скрипт, немного переделал, работает если не добавлять функции _PathSplit и _PathMake
Код: Выделить весь код
#NoTrayIcon

$aFiles = _Get_Files()

_Convert($aFiles)

Func _Convert($a_Files)
	Local $PNGSplitPath = _PathSplit(@ScriptFullPath, $szDrive, $szDir, $szFName, $szExt)
	Local $PNGMakePath = _PathMake($szDrive, $szDir, $szFName, ".png")
    Local $s_nvdxt = 'convert.exe', $s_TempDir = @TempDir & '\_TempTex', $i_End
    If Not FileExists($s_TempDir) Then
        If Not DirCreate($s_TempDir) Then Return SetError(1)
	EndIf
		
    If Not FileInstall('convert.exe', $s_TempDir & '\' & $s_nvdxt, 1) Then Return SetError(1)
		
    For $i = 1 To $a_Files[0]
       	$i_End = RunWait('"' & $s_TempDir & '\' & $s_nvdxt & '" "' & $a_Files[$i] '" -set colorspace RGB "' & $PNGMakePath & '"', '', @SW_HIDE)
        If $i_End Then Return SetError(1)
        ;FileMove($a_Files[$i], $s_TempDir, 1)
	Next
    FileDelete($s_TempDir & '\' & $s_nvdxt)
	DirRemove ($s_TempDir, 1)
EndFunc   ;==>_Convert

Func _Get_Files()
    Local $aFiles[$CmdLine[0] + 1] = [$CmdLine[0]]

    For $i = 1 To $CmdLine[0]
        $aFiles[$i] = $CmdLine[$i]
    Next
    Return $aFiles
EndFunc   ;==>_Get_Files
помогите пожалуйста

Последний раз редактировалось Tosyk, 17-09-2012 в 10:27.


Отправлено: 09:59, 17-09-2012 | #5


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата Tosyk:
должно работать, »
Не должно. С чего оно должно работать, если оно даже не компилируется, а?!

Код: Выделить весь код
#Include <File.au3>

AutoItSetOption("MustDeclareVars", 1)

Local $i
Local $sSourceFile, $sDestFile
Local $sDrive, $sFolder, $sFileName, $sExt

Local $sPattern = "tga|jpg|bmp"


If $CmdLine[0] <> 0 Then
	If FileInstall("convert.exe", @TempDir & "\", 1) = 1 Then
		For $i = 1 To $CmdLine[0]
			$sSourceFile = $CmdLine[$i]
			
			If FileExists($sSourceFile) Then
				_PathSplit($sSourceFile, $sDrive, $sFolder, $sFileName, $sExt)
				
				If StringRegExp($sExt, "\A" & $sPattern & "\z", 0) = 1 Then
					$sDestFile = _PathMake($sDrive, $sFolder, $sFileName, ".png")
					
					RunWait("""" & @TempDir & "\convert.exe"" """ & $sSourceFile & """ -set colorspace RGB """ & $sDestFile & """", @TempDir, @SW_HIDE)
				Else
					ConsoleWriteError("Extension of file [" & $sSourceFile & "] is not in [" & $sPattern & "]" & @CRLF)
				EndIf
			Else
				ConsoleWriteError("File [" & $sSourceFile & "] not found" & @CRLF)
			EndIf
		Next
		
		If FileExists(@TempDir & "\convert.exe") = 1 Then
			FileDelete(@TempDir & "\convert.exe")
		EndIf
	Else
		ConsoleWriteError("Can't extract [convert.exe] into [" & @TempDir & "]" & @CRLF)
	EndIf
Else
	MsgBox(0, "Usage", @ScriptName & " <file>")
	ConsoleWrite("Usage: " & @ScriptName & " <file>" & @CRLF)
EndIf

Exit(0)

Отправлено: 05:29, 18-09-2012 | #6


Аватара для Tosyk

Старожил


Сообщения: 166
Благодарности: 0

Профиль | Отправить PM | Цитировать


Спасибо, но у меня ничего не конвертируется. попробуйте использовать convert.exe и пример

https://dl.dropbox.com/u/9919707/tem...ng_textures.7z

Цитата Iska:
оно даже не компилируется »
у меня нормально компилируется

Отправлено: 08:14, 18-09-2012 | #7


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата Tosyk:
у меня нормально компилируется »
Ваш код в принципе не может компилироваться, поскольку в нём есть синтаксические ошибки: отсутствует «#Include <File.au3>», не хватает конкатенации «&» в выражениях и т.п.


Цитата Tosyk:
но у меня ничего не конвертируется. попробуйте использовать convert.exe и пример https://dl.dropbox.com/u/9919707/tem...ng_textures.7z »
Попробовал. Не сконвертировался.

Я пропустил точку в шаблоне расширений. Попробуйте так:
Код: Выделить весь код
#Include <File.au3>

AutoItSetOption("MustDeclareVars", 1)

Local $i
Local $sSourceFile, $sDestFile
Local $sDrive, $sFolder, $sFileName, $sExt

Local $sPattern = "\.(?i:tga|jpg|bmp)"


If $CmdLine[0] <> 0 Then
	If FileInstall("convert.exe", @TempDir & "\", 1) = 1 Then
		For $i = 1 To $CmdLine[0]
			$sSourceFile = $CmdLine[$i]

			If FileExists($sSourceFile) Then
				_PathSplit($sSourceFile, $sDrive, $sFolder, $sFileName, $sExt)

				If StringRegExp($sExt, "\A" & $sPattern & "\z", 0) = 1 Then
					$sDestFile = _PathMake($sDrive, $sFolder, $sFileName, ".png")

					RunWait("""" & @TempDir & "\convert.exe"" """ & $sSourceFile & """ -set colorspace RGB """ & $sDestFile & """", @TempDir, @SW_HIDE)
				Else
					ConsoleWriteError("Extension of file [" & $sSourceFile & "] is [" & $sExt & "] and not in [" & $sPattern & "]" & @CRLF)
				EndIf
			Else
				ConsoleWriteError("File [" & $sSourceFile & "] not found" & @CRLF)
			EndIf
		Next

		If FileExists(@TempDir & "\convert.exe") = 1 Then
			FileDelete(@TempDir & "\convert.exe")
		EndIf
	Else
		ConsoleWriteError("Can't extract [convert.exe] into [" & @TempDir & "]" & @CRLF)
	EndIf
Else
	MsgBox(0, "Usage", @ScriptName & " <file>")
	ConsoleWrite("Usage: " & @ScriptName & " <file>" & @CRLF)
EndIf

Exit(0)

Отправлено: 09:12, 18-09-2012 | #8


Аватара для Tosyk

Старожил


Сообщения: 166
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата Iska:
Ваш код в принципе не может компилироваться »
зачем мне обманывать право слово?говорю по факту
Цитата Iska:
Попробуйте так: »
работает, спасибо оргомное!

вы знаете как будет влиять на CPU обработка допустим 1000 файлов в таком скрипте?

Отправлено: 10:13, 18-09-2012 | #9


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата Tosyk:
зачем мне обманывать право слово?говорю по факту »
↧ Факты ↧
Цитата:
Код: Выделить весь код
"C:\Program Files\AutoIt3\SciTE\AutoIt3Wrapper\AutoIt3Wrapper.exe" /prod /in "E:\Песочница\0119\0003.au3" /autoit3dir "C:\Program Files\AutoIt3"
+>11:42:39 Starting AutoIt3Wrapper v.2.0.1.33    Environment(Language:0419  Keyboard:00000409  OS:WIN_XP/Service Pack 3  CPU:X64 OS:X86)
>Running AU3Check (1.54.19.0)  from:C:\Program Files\AutoIt3
E:\Песочница\0119\0003.au3(8,60) : WARNING: $szDrive: possibly used before declaration.
	Local $PNGSplitPath = _PathSplit(@ScriptFullPath, $szDrive,
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
E:\Песочница\0119\0003.au3(8,68) : WARNING: $szDir: possibly used before declaration.
	Local $PNGSplitPath = _PathSplit(@ScriptFullPath, $szDrive, $szDir,
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
E:\Песочница\0119\0003.au3(8,78) : WARNING: $szFName: possibly used before declaration.
	Local $PNGSplitPath = _PathSplit(@ScriptFullPath, $szDrive, $szDir, $szFName,
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
E:\Песочница\0119\0003.au3(8,86) : WARNING: $szExt: possibly used before declaration.
	Local $PNGSplitPath = _PathSplit(@ScriptFullPath, $szDrive, $szDir, $szFName, $szExt)
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
E:\Песочница\0119\0003.au3(18,108) : ERROR: syntax error
       	$i_End = RunWait('"' & $s_TempDir & '\' & $s_nvdxt & '" "' & $a_Files[$i] '" -set colorspace RGB "'
~~~~~~~	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
E:\Песочница\0119\0003.au3(8,60) : ERROR: $szDrive: undeclared global variable.
	Local $PNGSplitPath = _PathSplit(@ScriptFullPath, $szDrive,
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
E:\Песочница\0119\0003.au3(8,86) : ERROR: _PathSplit(): undefined function.
	Local $PNGSplitPath = _PathSplit(@ScriptFullPath, $szDrive, $szDir, $szFName, $szExt)
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
E:\Песочница\0119\0003.au3(9,67) : ERROR: _PathMake(): undefined function.
	Local $PNGMakePath = _PathMake($szDrive, $szDir, $szFName, ".png")
	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
E:\Песочница\0119\0003.au3 - 4 error(s), 4 warning(s)
!>11:42:40 AU3Check ended.rc:2
>Exit code: 0    Time: 5.200


Цитата Tosyk:
вы знаете как будет влиять на CPU обработка допустим 1000 файлов в таком скрипте? »
Будет дико медленно. Как на CPU — не скажу, смотрите сами.

Отправлено: 11:46, 18-09-2012 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Подставить переменную исходящего файла

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Чтение всего txt файла в переменную bat binwatch@vk Скриптовые языки администрирования Windows 10 09-09-2012 18:57
Любой язык - [решено] Скрипт использующий переменную из файла .txt XXXp Скриптовые языки администрирования Windows 27 18-05-2011 21:34
CMD/BAT - [решено] Чтение содержимого текстового файла в переменную kosmopes Скриптовые языки администрирования Windows 2 11-03-2011 12:58
CMD/BAT - [решено] Ввод данных в переменную из txt-файла river123 Скриптовые языки администрирования Windows 1 10-01-2011 18:43
CMD/BAT - [решено] Чтение строки из файла в переменную Николя Скриптовые языки администрирования Windows 42 17-01-2010 19:42




 
Переход