Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] Подставить переменную исходящего файла (http://forum.oszone.net/showthread.php?t=242807)

Tosyk 17-09-2012 05:34 1990043

Подставить переменную исходящего файла
 
Есть скрипт. Компилируем, получаем .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 1990060

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

Tosyk 17-09-2012 07:46 1990075

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

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

Разбираете и собираете здесь:
Код:

        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 1990135

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

Цитата:

Цитата 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)


Tosyk 18-09-2012 08:14 1990669

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

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

Цитата:

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

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

Iska 18-09-2012 09:12 1990682

Цитата:

Цитата 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)


Tosyk 18-09-2012 10:13 1990707

Цитата:

Цитата Iska
Ваш код в принципе не может компилироваться »

зачем мне обманывать право слово?говорю по факту
Цитата:

Цитата Iska
Попробуйте так: »

работает, спасибо оргомное!

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

Iska 18-09-2012 11:46 1990768

Цитата:

Цитата 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 — не скажу, смотрите сами.

Iska 18-09-2012 12:28 1990789

Цитата:

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

Tosyk, Вы выбрали именно «ImageMagick» с какой-то определённой целью?

Tosyk 18-09-2012 12:29 1990790

Цитата:

Цитата Iska
↧ Факты ↧ »

и у меня тоже есть:
Код:

>"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

Цитата:

Цитата Iska
Будет дико медленно »

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

Tosyk 18-09-2012 12:48 1990800

Цитата:

Цитата Iska
Tosyk, Вы выбрали именно «ImageMagick» с какой-то определённой целью? »

конечно, он имеет огромное количество функций и поддерживает распространённые графические форматы, конкретно меня интересовала возможность замены rgba каналов

Iska 18-09-2012 13:20 1990810

Цитата:

Цитата Tosyk
и у меня тоже есть: »

Теперь сравните код, который Вы компилировали с тем кодом, который Вы выкладывали.


Цитата:

Цитата Tosyk
скажите пожалуйста будут медленно конвертироваться? »

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

На NConvert глядели?

Tosyk 18-09-2012 15:38 1990876

Цитата:

Цитата Iska
Теперь сравните код, который Вы компилировали с тем кодом, который Вы выкладывали. »

я именно из этого сообщения его копировал и компилил, чтобы не ошибаться

Цитата:

Цитата Iska
На NConvert глядели? »

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

Iska 19-09-2012 00:00 1991196

Цитата:

Цитата Tosyk
я именно из этого сообщения его копировал и компилил, чтобы не ошибаться »

Не верю в такие чудеса, коллега.


Цитата:

Цитата Tosyk
Цитата:

Цитата Iska
На NConvert глядели? »

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

Жаль. Тому можно задать перечень файлов списком.

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

Tosyk 19-09-2012 03:22 1991255

Цитата:

Цитата Iska
Не верю в такие чудеса, коллега. »

я вам докажу!

Цитата:

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

это когда каналы RGBA в картинке меняются местами

Iska 19-09-2012 03:42 1991259

Цитата:

Цитата Tosyk
это когда каналы RGBA в картинке меняются местами »

Какие с какими?

Tosyk 19-09-2012 03:55 1991260

Цитата:

Цитата Iska
Какие с какими? »

например поменять blue и alpha местами

Iska 19-09-2012 07:10 1991281

Именно это указывается параметром «-set colorspace RGB»?

Tosyk 19-09-2012 07:37 1991287

Цитата:

Цитата Iska
Именно это указывается параметром «-set colorspace RGB»? »

нет, это параметр для примера, дальше я уже расширяю, делаю несколько скриптов и встраиваю в контекстное меню для определённых типов файлов

Iska 19-09-2012 08:25 1991295

Tosyk, спасибо, ясно.

Tosyk 19-09-2012 08:36 1991302

Цитата:

Цитата Iska
Tosyk, спасибо, ясно. »

спасибо вам


Время: 12:15.

Время: 12:15.
© OSzone.net 2001-