Что нового

[Автоматизация] Скрипт собранный в EXE не работает

Tosyk

Новичок
Сообщения
206
Репутация
0
Подскажите почему скрипт не конвертирует файл, который я кидаю на скомпилированный из этого скрипта EXE:

Код:
#Include <File.au3>

AutoItSetOption("MustDeclareVars", 1)

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

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

If $CmdLine[0] <> 0 Then
	If FileExists("C:\Program Files\ImageMagick\convert.exe") Then
		ProgressOn("Converting", "", "0%")

		For $i = 1 To $CmdLine[0]
			$sSourceFile = $CmdLine[$i]

			ProgressSet(($i / $CmdLine[0]) * 100, $sFileName & $sExt, String(Round($i / $CmdLine[0] * 100, 1)) & "%")

			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('""C:\Program Files\ImageMagick\convert.exe"" & $sSourceFile & "" -alpha on "" & $sDestFile &',@SW_HIDE)
;~ 					 RunWait('"C:\Program Files\ImageMagick\" & "convert.exe" & $sSourceFile & -someParam', "","")
					 RunWait('"' & 'C:\Program Files\ImageMagick\convert.exe' & $sSourceFile & '" -alpha on "' & $sDestFile & '"', '', @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

		ProgressSet(100 , "Converting complete", "100%")

		Sleep(1000)
		ProgressOff()
	EndIf
Else
	MsgBox(0, "Usage", @ScriptName & " <file>")
	ConsoleWrite("Usage: " & @ScriptName & " <file>" & @CRLF)
EndIf

Exit(0)
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Tosyk [?]
почему скрипт не конвертирует файл
Потому что прежде, чем передавать строку в функцию, необходимо убедиться в правильности строки
Код:
MsgBox(0, "", '"' & 'C:\Program Files\ImageMagick\convert.exe' & $sSourceFile & '" -alpha on "' & $sDestFile & '"')
Насколько я понимаю, отсутствуют кавычки и пробел после convert.exe.
 
Автор
Tosyk

Tosyk

Новичок
Сообщения
206
Репутация
0
InnI сказал(а):
Tosyk [?]
почему скрипт не конвертирует файл
Потому что прежде, чем передавать строку в функцию, необходимо убедиться в правильности строки
Код:
MsgBox(0, "", '"' & 'C:\Program Files\ImageMagick\convert.exe' & $sSourceFile & '" -alpha on "' & $sDestFile & '"')
Насколько я понимаю, отсутствуют кавычки и пробел после convert.exe.
заменил свою строку:
Код:
RunWait('"' & 'C:\Program Files\ImageMagick\convert.exe' & $sSourceFile & '" -alpha on "' & $sDestFile & '"', '', @SW_HIDE)

на вашу:
Код:
RunWait(0, "", '"' & 'C:\Program Files\ImageMagick\convert.exe' & $sSourceFile & '" -alpha on "' & $sDestFile & '"')

но всё равно ничего не конвертируется :scratch:
 
A

Alofa

Гость
Tosyk сказал(а):
... но всё равно ничего не конвертируется
Потому что у вас нарушен синтаксис строки передоваемой в cmd.
InnI не просто так вам дал код, а для того чтобы вы посмотрели, как это выглятит и определили элементарную ошибку.
В скриптописании вам придется постоянно сталкиваться с ошибками, и если не научиться их вычислять, то и не стоит пытаться писать.
Учитесь - это опыт.
 
Автор
Tosyk

Tosyk

Новичок
Сообщения
206
Репутация
0
Alofa сказал(а):
Tosyk сказал(а):
... но всё равно ничего не конвертируется
Потому что у вас нарушен синтаксис строки передоваемой в cmd.
InnI не просто так вам дал код, а для того чтобы вы посмотрели, как это выглятит и определили элементарную ошибку.
В скриптописании вам придется постоянно сталкиваться с ошибками, и если не научиться их вычислять, то и не стоит пытаться писать.
Учитесь - это опыт.
конечно, я гуглил и читал и менял строчки и так и эдак, я натыкался на разные варианты RunWait() и понял только, что нет одного рецепта, записать можно по разному, правильная работа зависит не только от этой строки, но и от всего вкупе. если бы была возможность продебажить этот код я бы видел в чём конкретно ошибка.

сюда я обратился после всех моих неудач. мне сложно понимать эти кавычки — где-то двойные, где-то одинарные, где-то нужны кавычки для кавычек. думаю, проблема в том, что я не понимаю природу синтаксиса.
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
Нет пробела после convert.exe
Идет сразу слитно путь к файлу.
Код:
'......convert.exe' & $sSourceFile

Нужно
Код:
'......convert.exe ' & $sSourceFile
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Tosyk [?]
если бы была возможность продебажить этот код я бы видел в чём конкретно ошибка.
Я вам как раз и показал, как "дебажить" строки - выводите их в MsgBox или в консоль и смотрите, что не так. Добавляете необходимые пробелы и кавычки, убеждаетесь, что строка выглядит правильно, копируете её в RunWait, а "дебажные" строки удаляете/комментируете.

Для отладки параметров командной строки в SciTE есть пункт меню "View" -> "Parameters Shift+F8". Вводите первый параметр (в вашем случае путь к файлу), нажимаете "Set" и запускаете скрипт через "Tools" -> "Go F5". Данный подход позволит вам проводить отладку параметров командной строки без компиляции с возможностью вывода отладочных сообщений в консоль SciTE.
 
Автор
Tosyk

Tosyk

Новичок
Сообщения
206
Репутация
0
Спасибо большое, скрипт работает в таком виде:
Код:
#Include <File.au3>

AutoItSetOption("MustDeclareVars", 1)

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

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

If $CmdLine[0] <> 0 Then
	If FileExists("C:\Program Files\ImageMagick\convert.exe") Then
		ProgressOn("Converting", "", "0%")

		For $i = 1 To $CmdLine[0]
			$sSourceFile = $CmdLine[$i]

			ProgressSet(($i / $CmdLine[0]) * 100, $sFileName & $sExt, String(Round($i / $CmdLine[0] * 100, 1)) & "%")

			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("""" & "C:\Program Files\ImageMagick\convert.exe "" """ & $sSourceFile & """ -alpha on """ & $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

		ProgressSet(100 , "Converting complete", "100%")

		Sleep(1000)
		ProgressOff()
	EndIf
Else
	MsgBox(0, "Usage", "Drop file(s) on " & @ScriptName)
	ConsoleWrite("Usage: " & @ScriptName & " <file>" & @CRLF)
EndIf

Exit(0)


но вот если я те же правила применяю в другом случае то скрипт уже не работает:
Код:
...					 $sDestPath = _PathFull($sDrive, $sFolder)
					 RunWait("""" & "C:\Program Files\ImageMagick\tools\texconv.exe"" """ & """ -y -f R8G8B8A8_UNORM -ft tga -o """ & $sDestPath & $sSourceFile & """", @ScriptDir, @SW_HIDE)
...

или вот тут, тоже никакого эффекта:
Код:
...
					 $sDestFile = _PathMake($sDrive, $sFolder, $sFileName, ".dds")
					 RunWait("""" & "C:\Program Files\ImageMagick\tools\nvdxt.exe"" """ & """ -file """ & $sSourceFile & """ -dxt1c -outsamedir -quality_highest -nomipmap -overwrite""", '', @SW_HIDE)
...
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
Что то много кавычек. Еще момент, полный путь на кирилице может не работать в cmd
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Tosyk
Подготовьте кавычки заранее, разложив строку на переменные. Затем из этих переменных, как из конструктора, соберите результат
Код:
$sExePath = '"C:\Program Files\ImageMagick\tools\texconv.exe"'
$sParams = '-y -f R8G8B8A8_UNORM -ft tga -o'
$sDestPath = '"' & _PathFull($sDrive, $sFolder) & '"'
$sSourceFile = '"' & $sSourceFile & '"'
$sRunWait = $sExePath & " " & $sParams & " " & $sDestPath & " " & $sSourceFile
;~ ConsoleWrite($sRunWait & @CRLF) ; отладка
RunWait($sRunWait, @ScriptDir, @SW_HIDE)
...
$sExePath = '"C:\Program Files\ImageMagick\tools\nvdxt.exe"'
$sParams = '-dxt1c -outsamedir -quality_highest -nomipmap -overwrite -file'
$sDestFile = '"' & _PathMake($sDrive, $sFolder, $sFileName, ".png") & '"'
$sRunWait = $sExePath & " " & $sParams & " " & $sDestFile
;~ ConsoleWrite($sRunWait & @CRLF) ; отладка
RunWait($sRunWait, @ScriptDir, @SW_HIDE)
 
Автор
Tosyk

Tosyk

Новичок
Сообщения
206
Репутация
0
вот это очень полезно, кстати, а то я прямо путаюсь в пробелах и кавычках. И да, русские пути не работают почему-то.

ещё texconv.exe не любит если в параметре -o OUTPUT_PATH вокруг OUTPUT_PATH ставятся кавычки, что как бы очень странно.

в итоге у меня получилось два вот таких скрипта ни один из которых не работает:
Код:
#Include <File.au3>

AutoItSetOption("MustDeclareVars", 1)

Local $i
Local $sSourceFile, $sDestFile, $sDestPath, $sExePath
Local $sDrive, $sFolder, $sFileName, $sExt, $sParams, $sRunWait

Local $sPattern = "\.(?i:dds)"

If $CmdLine[0] <> 0 Then
	If FileExists("C:\Program Files\ImageMagick\tools\texconv.exe") Then
		ProgressOn("Converting", "", "0%")

		For $i = 1 To $CmdLine[0]
			$sSourceFile = $CmdLine[$i]

			ProgressSet(($i / $CmdLine[0]) * 100, $sFileName & $sExt, String(Round($i / $CmdLine[0] * 100, 1)) & "%")

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

				If StringRegExp($sExt, "\A" & $sPattern & "\z", 0) = 1 Then
					 $sExePath = '"C:\Program Files\ImageMagick\tools\texconv.exe"'
					 $sParams = '-y -f R8G8B8A8_UNORM -ft tga -o'
					 $sDestPath = '"' & _PathFull($sDrive, $sFolder) & '"'
					 $sSourceFile = '"' & $sSourceFile & '"'
					 $sRunWait = $sExePath & " " & $sParams & " " & $sDestPath & " " & $sSourceFile
					 ConsoleWrite($sRunWait & @CRLF) ; отладка

;~ 					 RunWait($sRunWait, @ScriptDir, @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

		ProgressSet(100 , "Converting complete", "100%")

		Sleep(1000)
		ProgressOff()
	EndIf
Else
	MsgBox(0, "Usage", "Drop file(s) on " & @ScriptName)
	ConsoleWrite("Usage: " & @ScriptName & " <file>" & @CRLF)
EndIf

Exit(0)

Код:
#Include <File.au3>

AutoItSetOption("MustDeclareVars", 1)

Local $i
Local $sSourceFile, $sDestFile, $sExePath
Local $sDrive, $sFolder, $sFileName, $sExt, $sParams, $sRunWait

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

If $CmdLine[0] <> 0 Then
	If FileExists("C:\Program Files\ImageMagick\tools\nvdxt.exe") Then
		ProgressOn("Converting", "", "0%")

		For $i = 1 To $CmdLine[0]
			$sSourceFile = $CmdLine[$i]

			ProgressSet(($i / $CmdLine[0]) * 100, $sFileName & $sExt, String(Round($i / $CmdLine[0] * 100, 1)) & "%")

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

				If StringRegExp($sExt, "\A" & $sPattern & "\z", 0) = 1 Then
					 $sExePath = '"C:\Program Files\ImageMagick\tools\nvdxt.exe -file"'
					 $sParams = '-dxt1c -outsamedir -quality_highest -nomipmap -overwrite'
					 $sSourceFile = '"' & $sSourceFile & '"'
					 $sRunWait = $sExePath & " " & $sSourceFile & " " & $sParams
					 ;~ ConsoleWrite($sRunWait & @CRLF) ; отладка

					 RunWait($sRunWait, @ScriptDir, @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

		ProgressSet(100 , "Converting complete", "100%")

		Sleep(1000)
		ProgressOff()
	EndIf
Else
	MsgBox(0, "Usage", "Drop file(s) on " & @ScriptName)
	ConsoleWrite("Usage: " & @ScriptName & " <file>" & @CRLF)
EndIf

Exit(0)
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
зачем здесь
Код:
$sExePath = '"C:\Program Files\ImageMagick\tools\nvdxt.exe -file"'

и здесь
Код:
$sSourceFile = '"' & $sSourceFile & '"'
$sDestPath = '"' & _PathFull($sDrive, $sFolder) & '"'

двойные кавычки? Первый путь это для запуска, кавычки не нужны. Второй путь это передаваемые запускаемому файлу параметры. Требуются кавычки? Если без них?
для изменения вида написания пути можно использовать
Код:
Func _ANSIToOEM($strText)
	Local $sBUFFER = DllStructCreate("char[" & StringLen($strText) + 1 & "]")
	Local $aRet = DllCall("User32.dll", "int", "CharToOem", "str", $strText, "ptr", DllStructGetPtr($sBUFFER))
	If Not IsArray($aRet) Then Return SetError(1, 0, '')
	If $aRet[0] = 0 Then Return SetError(2, $aRet[0], '')
	Return DllStructGetData($sBUFFER, 1)
EndFunc   ;==>_ANSIToOEM
 
Автор
Tosyk

Tosyk

Новичок
Сообщения
206
Репутация
0
Строчка из Командной строки выглядит и работает как:
Код:
C:\Program Files\ImageMagick\tools\texconv.exe" -y -f R8G8B8A8_UNORM -ft tga -o "D:\бра элит" "D:\бра элит\cn_e3_14_bra_elite_bag_n.dds"
но если использовать вот такой CMD и бросать на него файлы то конвертирования не происходит:
Код:
@echo off

if [%1]==[] goto :eof
:loop
"C:\Program Files\ImageMagick\tools\texconv.exe" -y -f R8G8B8A8_UNORM -ft tga -o ""%~p1"" "%~1"
shift
if not [%1]==[] goto loop
скрипт говорит, что не может найти файл обрываясь на русских символах или на пробеле

т.е. фактически если кавычки для output path нужны, можно оставить всё как есть? но почему тогда не работает?

p.s.: уме не приложу как использовать функцию. почитал но примеров применения не нашёл
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
скачал необходимый материал для тестирования.
Тест показал, что нужно использовать короткие пути типа C:\51A2~1\33B3~1
у меня работает такой код

Код:
$sExePath = 'C:\Новая папка\ImageMagick\texconv.exe'
$sParams = '-y -f R8G8B8A8_UNORM -ft tga -o'
$sSourceFile = FileGetShortName('C:\Новая папка\Новая папка — копия\IMG_8046.jpg')
$sDestPath = FileGetShortName('C:\Новая папка\Новая папка — копия')
$sRunWait = $sExePath & " " & $sParams & " " & $sDestPath & " " & $sSourceFile
ConsoleWrite($sRunWait & @CRLF)
RunWait($sRunWait)

$sExePath = 'C:\Новая папка\ImageMagick\convert.exe'
$sParams = '-alpha on'
$sSourceFile = FileGetShortName('C:\Новая папка\Новая папка — копия\IMG_8046_1.jpg')
$sDestPath = StringTrimRight($sSourceFile, 3) & 'png'
$sRunWait = $sExePath & " " & $sParams & " " &  $sSourceFile & " " &  $sDestPath
ConsoleWrite($sRunWait & @CRLF)
RunWait($sRunWait)

$sExePath = 'C:\Новая папка\ImageMagick\nvdxt.exe'
$sParams = '-dxt1c -outsamedir -quality_highest -nomipmap -overwrite -file'
$sSourceFile = FileGetShortName('C:\Новая папка\Новая папка — копия\IMG_8046_2.jpg')
$sRunWait = $sExePath & " " & $sParams & " " & $sSourceFile
ConsoleWrite($sRunWait & @CRLF)
RunWait($sRunWait)

Но есть момент, что функция FileGetShortName не хочет обрабатывать путь, если папку переместить на диск D:\
Судя по форуму это бывает, но не у всех.
Во всяком случае, смысл составления кода понятен?
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Tosyk [?]
два вот таких скрипта ни один из которых не работает
В первом случае у вас RunWait закомментирована. Естественно, не работает.

Во втором - очередная проблема с кавычкой в $sExePath. Из чего можно сделать вывод, что после внесения изменений вы не проверяете результат.
Нужно так
Код:
$sExePath = '"C:\Program Files\ImageMagick\tools\nvdxt.exe" -file'


joiner [?]
зачем здесь<...>двойные кавычки?
Для отладки. Чтобы скопировать полученную строку из консоли SciTE, вставить в окно cmd и проверить. Но Tosyk, похоже, "дебажит" только на словах и, фактически, просто ожидает готового скрипта, имитируя бурную деятельность методом копипаста.
 
Автор
Tosyk

Tosyk

Новичок
Сообщения
206
Репутация
0
joiner сказал(а):
скачал необходимый материал для тестирования.
Тест показал, что нужно использовать короткие пути типа C:\51A2~1\33B3~1
у меня работает такой код
пробую вот такой вариант:
Код:
$sExePath = 'C:\Program Files\ImageMagick\tools\texconv.exe'
					 $sParams = '-y -f R8G8B8A8_UNORM -ft tga -o'
					 $sDestPath = FileGetShortName(_PathFull($sDrive, $sFolder))
					 $sSourceFile = FileGetShortName($sSourceFile)
					 $sRunWait = $sExePath & " " & $sParams & " " & $sDestPath & " " & $sSourceFile
					 ConsoleWrite($sRunWait & @CRLF) ; отладка

;~ 					 RunWait($sRunWait, @SW_HIDE)


результата нет, но отладка говорит, что
Код:
File [D:\bra] not found
File [elite\cn_e3_14_bra_elite_bag_m.jpg] not found

InnI сказал(а):
... после внесения изменений вы не проверяете результат
проверяю. прошу прощения если я не правильно показываю результаты
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Tosyk [?]
отладка говорит
Если путь к файлу содержит пробелы, то в окне параметров SciTE (которое по Shift+F8 вызывается) нужно указывать этот путь в кавычках:
"D:\bra elite\cn_e3_14_bra_elite_bag_m.jpg"
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
Tosyk
в данном случае InnI прав - пробелы в двойные кавычки заключить. тогда и короткий путь не нужен.
я переделал свой пример, проверил, все работает.
Код:
$sExePath = 'D:\Новая папка\ImageMagick\texconv.exe'
$sParams = '-y -f R8G8B8A8_UNORM -ft tga -o'
$sSourceFile = '"D:\Новая папка\Новая папка — копия\IMG_8046.jpg"'
$sDestPath = '"D:\Новая папка\Новая папка — копия"'
$sRunWait = $sExePath & " " & $sParams & " " & $sDestPath & " " & $sSourceFile
ConsoleWrite($sRunWait & @CRLF)
RunWait($sRunWait)

$sExePath = 'D:\Новая папка\ImageMagick\convert.exe'
$sParams = '-alpha on'
$sSourceFile = '"D:\Новая папка\Новая папка — копия\IMG_8046_1.jpg"'
$sDestPath = StringTrimRight($sSourceFile, 4) & 'png"'
$sRunWait = $sExePath & " " & $sParams & " " &  $sSourceFile & " " &  $sDestPath
ConsoleWrite($sRunWait & @CRLF)
RunWait($sRunWait)

$sExePath = 'D:\Новая папка\ImageMagick\nvdxt.exe'
$sParams = '-dxt1c -outsamedir -quality_highest -nomipmap -overwrite -file'
$sSourceFile = '"D:\Новая папка\Новая папка — копия\IMG_8046_2.jpg"'
$sRunWait = $sExePath & " " & $sParams & " " & $sSourceFile
ConsoleWrite($sRunWait & @CRLF)
RunWait($sRunWait)
в примере и кирилица и пробелы
 
Автор
Tosyk

Tosyk

Новичок
Сообщения
206
Репутация
0
Да что ж такое. Не смотря на то, что строчка обрабатывается вроде правильно конвертирования всё равно не происходит.
Код вот такой:
Код:
#Include <File.au3>

AutoItSetOption("MustDeclareVars", 1)

Local $i
Local $sSourceFile, $sDestFile, $sDestPath, $sExePath
Local $sDrive, $sFolder, $sFileName, $sExt, $sParams, $sRunWait

Local $sPattern = "\.(?i:dds)"

If $CmdLine[0] <> 0 Then
	If FileExists("C:\Program Files\ImageMagick\tools\texconv.exe") Then
		ProgressOn("Converting", "", "0%")

		For $i = 1 To $CmdLine[0]
			$sSourceFile = $CmdLine[$i]

			ProgressSet(($i / $CmdLine[0]) * 100, $sFileName & $sExt, String(Round($i / $CmdLine[0] * 100, 1)) & "%")

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

				If StringRegExp($sExt, "\A" & $sPattern & "\z", 0) = 1 Then
					 $sExePath = 'C:\Program Files\ImageMagick\tools\texconv.exe'
					 $sParams = '-y -f R8G8B8A8_UNORM -ft tga -o'
					 $sDestPath = FileGetShortName(_PathFull($sDrive, $sFolder))
					 $sSourceFile = FileGetShortName($sSourceFile)
					 $sRunWait = $sExePath & " " & $sParams & " " & $sDestPath & " " & $sSourceFile
;~ 					 ConsoleWrite($sRunWait & @CRLF) ; отладка

					 RunWait($sRunWait, @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

		ProgressSet(100 , "Converting complete", "100%")

		Sleep(1000)
		ProgressOff()
	EndIf
Else
	MsgBox(0, "Usage", "Drop file(s) on " & @ScriptName)
	ConsoleWrite("Usage: " & @ScriptName & " <file>" & @CRLF)
EndIf

Exit(0)

результат в консоле при дебаге вот что:

Код:
C:\Program Files\ImageMagick\tools\texconv.exe -y -f R8G8B8A8_UNORM -ft tga -o D:\ D:\BRAELI~1\CN_E3_~1.DDS

кстати не понятно почему в качестве результирующей папки используется просто D:\
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
переделал под себя, все работает
Код:
#include <File.au3>

AutoItSetOption("MustDeclareVars", 1)

Local $i
Local $sSourceFile, $sDestFile, $sDestPath, $sExePath
Local $sDrive, $sFolder, $sFileName, $sExt, $sParams, $sRunWait

Local $sPattern = "\.(?i:dds)"

If $CmdLine[0] <> 0 Then
	If FileExists("D:\Новая папка\ImageMagick\texconv.exe") Then
		ProgressOn("Converting", "", "0%")

		For $i = 1 To $CmdLine[0]
			$sSourceFile = $CmdLine[$i]

			ProgressSet(($i / $CmdLine[0]) * 100, $sFileName & $sExt, String(Round($i / $CmdLine[0] * 100, 1)) & "%")

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

;~ 				If StringRegExp($sExt, "\A" & $sPattern & "\z", 0) = 1 Then
					$sExePath = 'D:\Новая папка\ImageMagick\texconv.exe'
					$sParams = '-y -f R8G8B8A8_UNORM -ft tga -o'
					$sDestPath = '"' & $sDrive & '\' & StringTrimRight($sFolder, 1) & '"'
					$sSourceFile = '"' & $sSourceFile & '"'
					$sRunWait = $sExePath & " " & $sParams & " " & $sDestPath & " " & $sSourceFile
					;MsgBox(0, '', $sRunWait) ; отладка

					RunWait($sRunWait)
;~ 				Else
;~ 					ConsoleWriteError("Extension of file [" & $sSourceFile & "] is [" & $sExt & "] and not in [" & $sPattern & "]" & @CRLF)
;~ 				EndIf
			Else
				MsgBox(0, '', "File [" & $sSourceFile & "] not found")
			EndIf
		Next

		ProgressSet(100, "Converting complete", "100%")

		Sleep(1000)
		ProgressOff()
	EndIf
Else
	MsgBox(0, "Usage", "Drop file(s) on " & @ScriptName)
	ConsoleWrite("Usage: " & @ScriptName & " <file>" & @CRLF)
EndIf

Exit (0)
_PathFull и _PathSplit можно вообще не использовать, заменить на регулярку, которая вернет путь к папке, в которой находится конвертируемый файл
 
Верх