Показать полную графическую версию : [решено] Подставить переменную исходящего файла
Есть скрипт. Компилируем, получаем .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: хочу сделать контекстные меню для быстрого доступа для конвертирования группы изображений
Tosyk, воспользуйтесь функциями: _PathSplit (http://www.autoitscript.com/autoit3/docs/libfunctions/_PathSplit.htm) для разбора имени файла на части и _PathMake (http://www.autoitscript.com/autoit3/docs/libfunctions/_PathMake.htm) для обратного слияния после замены расширения.
скрипт изначально не мой, для меня не совсем понятна природа некоторых элементов, поэтому для меня сложно сразу взять и использовать, в иной ситуации я бы наверное бы даже не спрашивал о помощи, но то, что вы показали очень даже имеет смысл, похоже на %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, не совсем понимаю как ей воспользоваться
объясните пожалуйста
Не разбирался с Вашим кодом.
Разбираете и собираете здесь:
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» (и что-то у Вас тут с кавычками как-то не так).
хм, вроде всё понятно, должно работать, но не работает, странно.
взял за основу другой похожий свой скрипт, немного переделал, работает если не добавлять функции _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
помогите пожалуйста
должно работать, »
Не должно. С чего оно должно работать, если оно даже не компилируется, а?!
#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)
Спасибо, но у меня ничего не конвертируется. попробуйте использовать convert.exe и пример
https://dl.dropbox.com/u/9919707/temporary/01-converting_textures.7z
оно даже не компилируется »у меня нормально компилируется
у меня нормально компилируется »
Ваш код (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)
Ваш код в принципе не может компилироваться »зачем мне обманывать право слово?говорю по факту
Попробуйте так: »работает, спасибо оргомное!
вы знаете как будет влиять на CPU обработка допустим 1000 файлов в таком скрипте?
зачем мне обманывать право слово?говорю по факту »
"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 — не скажу, смотрите сами.
вы знаете как будет влиять на CPU обработка допустим 1000 файлов в таком скрипте? »
Tosyk, Вы выбрали именно «ImageMagick» с какой-то определённой целью?
↧ Факты ↧ »
и у меня тоже есть:
>"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, Вы выбрали именно «ImageMagick» с какой-то определённой целью? »конечно, он имеет огромное количество функций и поддерживает распространённые графические форматы, конкретно меня интересовала возможность замены rgba каналов
и у меня тоже есть: »
Теперь сравните код, который Вы компилировали с тем кодом, который Вы выкладывали (http://forum.oszone.net/post-1990135.html#post1990135).
скажите пожалуйста будут медленно конвертироваться? »
Конвертироваться. Точнее, большое время будет занимать запуск/останов кучи процессов.
На NConvert (http://www.xnview.com/en/nconvert.html) глядели?
Теперь сравните код, который Вы компилировали с тем кодом, который Вы выкладывали. »я именно из этого сообщения его копировал и компилил, чтобы не ошибаться
На NConvert глядели? »да, конечно, он был давно, но каким-то хреном в нём поломали swap каналов rgba и теперь этой функции там нет вообще
я именно из этого сообщения его копировал и компилил, чтобы не ошибаться »
Не верю в такие чудеса, коллега.
На NConvert (http://www.xnview.com/en/nconvert.html) глядели? »
да, конечно, он был давно, но каким-то хреном в нём поломали swap каналов rgba и теперь этой функции там нет вообще »
Жаль. Тому можно задать перечень файлов списком.
А что такое «swap каналов rgba»?
Не верю в такие чудеса, коллега. »я вам докажу!
А что такое «swap каналов rgba»? »это когда каналы RGBA в картинке меняются местами
это когда каналы RGBA в картинке меняются местами »
Какие с какими?
Какие с какими? »например поменять blue и alpha местами
Именно это указывается параметром «-set colorspace RGB»?
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.