PDA

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


Страниц : [1] 2

Tosyk
17-09-2012, 05:34
Есть скрипт. Компилируем, получаем .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: хочу сделать контекстные меню для быстрого доступа для конвертирования группы изображений

Iska
17-09-2012, 06:43
Tosyk, воспользуйтесь функциями: _PathSplit (http://www.autoitscript.com/autoit3/docs/libfunctions/_PathSplit.htm) для разбора имени файла на части и _PathMake (http://www.autoitscript.com/autoit3/docs/libfunctions/_PathMake.htm) для обратного слияния после замены расширения.

Tosyk
17-09-2012, 07:46
скрипт изначально не мой, для меня не совсем понятна природа некоторых элементов, поэтому для меня сложно сразу взять и использовать, в иной ситуации я бы наверное бы даже не спрашивал о помощи, но то, что вы показали очень даже имеет смысл, похоже на %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, не совсем понимаю как ей воспользоваться

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

Iska
17-09-2012, 08:34
Не разбирался с Вашим кодом.

Разбираете и собираете здесь:
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» (и что-то у Вас тут с кавычками как-то не так).

Tosyk
17-09-2012, 09:59
хм, вроде всё понятно, должно работать, но не работает, странно.
взял за основу другой похожий свой скрипт, немного переделал, работает если не добавлять функции _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

помогите пожалуйста

Iska
18-09-2012, 05:29
должно работать, »
Не должно. С чего оно должно работать, если оно даже не компилируется, а?!

#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)

Tosyk
18-09-2012, 08:14
Спасибо, но у меня ничего не конвертируется. попробуйте использовать convert.exe и пример

https://dl.dropbox.com/u/9919707/temporary/01-converting_textures.7z

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

Iska
18-09-2012, 09:12
у меня нормально компилируется »
Ваш код (http://forum.oszone.net/post-1990135.html#post1990135) в принципе не может компилироваться, поскольку в нём есть синтаксические ошибки: отсутствует «#Include <File.au3>», не хватает конкатенации «&» в выражениях и т.п.

но у меня ничего не конвертируется. попробуйте использовать convert.exe и пример https://dl.dropbox.com/u/9919707/tem...ng_textures.7z (https://dl.dropbox.com/u/9919707/temporary/01-converting_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)

Tosyk
18-09-2012, 10:13
Ваш код в принципе не может компилироваться »зачем мне обманывать право слово?говорю по факту
Попробуйте так: »работает, спасибо оргомное!

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

Iska
18-09-2012, 11:46
зачем мне обманывать право слово?говорю по факту »
"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


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

Iska
18-09-2012, 12:28
вы знаете как будет влиять на CPU обработка допустим 1000 файлов в таком скрипте? »
Tosyk, Вы выбрали именно «ImageMagick» с какой-то определённой целью?

Tosyk
18-09-2012, 12:29
↧ Факты ↧ »
и у меня тоже есть:
>"C:\Program Files (x86)\AutoIt3\SciTE\..\aut2exe\aut2exe.exe" /in "C:\Users\karamba\Documents\My Dropbox\05-autoit\01-converting_textures\conv-script-to-png-08.au3"
Ultimate Packer for eXecutables
Copyright (C) 1996 - 2008
UPX 3.03w Markus Oberhumer, Laszlo Molnar & John Reiser Apr 27th 2008

File size Ratio Format Name
-------------------- ------ ----------- -----------
646144 -> 300544 46.51% win32/pe conv-script-to-png-08.exe

Packed 1 file.
>Exit code: 0 Time: 8.320

Будет дико медленно »скажите пожалуйста будут медленно конвертироваться? или медленно работать компьютер (explorer.exe)?

Tosyk
18-09-2012, 12:48
Tosyk, Вы выбрали именно «ImageMagick» с какой-то определённой целью? »конечно, он имеет огромное количество функций и поддерживает распространённые графические форматы, конкретно меня интересовала возможность замены rgba каналов

Iska
18-09-2012, 13:20
и у меня тоже есть: »
Теперь сравните код, который Вы компилировали с тем кодом, который Вы выкладывали (http://forum.oszone.net/post-1990135.html#post1990135).

скажите пожалуйста будут медленно конвертироваться? »
Конвертироваться. Точнее, большое время будет занимать запуск/останов кучи процессов.

На NConvert (http://www.xnview.com/en/nconvert.html) глядели?

Tosyk
18-09-2012, 15:38
Теперь сравните код, который Вы компилировали с тем кодом, который Вы выкладывали. »я именно из этого сообщения его копировал и компилил, чтобы не ошибаться

На NConvert глядели? »да, конечно, он был давно, но каким-то хреном в нём поломали swap каналов rgba и теперь этой функции там нет вообще

Iska
19-09-2012, 00:00
я именно из этого сообщения его копировал и компилил, чтобы не ошибаться »
Не верю в такие чудеса, коллега.

На NConvert (http://www.xnview.com/en/nconvert.html) глядели? »
да, конечно, он был давно, но каким-то хреном в нём поломали swap каналов rgba и теперь этой функции там нет вообще »
Жаль. Тому можно задать перечень файлов списком.

А что такое «swap каналов rgba»?

Tosyk
19-09-2012, 03:22
Не верю в такие чудеса, коллега. »я вам докажу!

А что такое «swap каналов rgba»? »это когда каналы RGBA в картинке меняются местами

Iska
19-09-2012, 03:42
это когда каналы RGBA в картинке меняются местами »
Какие с какими?

Tosyk
19-09-2012, 03:55
Какие с какими? »например поменять blue и alpha местами

Iska
19-09-2012, 07:10
Именно это указывается параметром «-set colorspace RGB»?




© OSzone.net 2001-2012