Что нового

записать cmd выражение в autoit

Ed_Vard

Новичок
Сообщения
19
Репутация
0
Добрый день, уважаемые форумчане!
Прошу помощи.
необходимо записать следующую команду из cmd в autoit через @comspec
Код:
c:\install\Portable\XnView\nconvert -o "c:\1\2\55555.jpg" -text_font "MS Shell Dlg 2" 32 -text_color 0 0 0 -text_back 255 255 255 -text_flag bottom-right -text_pos -30 0 -text_rotation 0 -text "ИМЯ ПАПКИ" "c:\1\1\*.jpg"

вот такой вариант постоянно упирается в ошибку пути
Код:
$XnViewpath = ("c:\install\Portable\XnView\nconvert") ;путь к конвертеру изображений
$Putraspakovki = 'c:\1\1\' ; путь к папке с исходные изображения
$Putgotovie = 'c:\1\2\' ; путь к папке с обработанными изображениями
;$FileList - массив с данными имен папок для подстановки соответствует "ИМЯ ПАПКИ"
;$Putraspakovki&$FileList[$i] - полный путь к папке с исходными изображениями

RunWait(@comspec&' /k "' & $XnViewpath & '" -o "' & $Putgotovie & '"5555.jpg -text_font "MS Shell Dlg 2" 32 -text_color 0 0 0 -text_back 255 255 255 -text_flag bottom-right -text_pos -30 0 -text_rotation 0 -text '&$FileList[$i]&' '&$Putraspakovki&$FileList[$i]&'*.jpg"',"")


сама командная строка отрабатывает нормально, а вот то что я пытаюсь изобразить увы :(
Заранее спасибо за ответ
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Ed_Vard
Замените RunWait на ConsoleWrite и посмотрите, что у вас получилось. Я вижу две проблемы: кавычка перед 5555.jpg и кавычка в самом конце.
 
Автор
E

Ed_Vard

Новичок
Сообщения
19
Репутация
0
InnI сказал(а):
Ed_Vard
Замените RunWait на ConsoleWrite и посмотрите, что у вас получилось. Я вижу две проблемы: кавычка перед 5555.jpg и кавычка в самом конце.
Спасибо за ответ, но я что то совсем запутался с этими кавычками.
Немного переделал - но это уже "блуждание в потемках" - т.к. не совсем понимаю принцип использования кавычек, но все равно не работает, ConsoleWrite ничего не выдает.
Код:
$XnViewpath = ("d:\install\Portable\XnView\nconvert") ;путь к конвертеру изображений
$Putraspakovki = 'd:\1\1\' ; путь к папке с исходные изображения
$Putgotovie = 'd:\1\2\5555.jpg' ; путь к папке с обработанными изображениями
;$FileList - массив с данными имен папок для подстановки соответствует "ИМЯ ПАПКИ"
;$Putraspakovki&$FileList[$i] - полный путь к папке с исходными изображениями
$Test = '-text_font "MS Shell Dlg 2" 32 -text_color 0 0 0 -text_back 255 255 255 -text_flag bottom-right -text_pos -30 0 -text_rotation 0 -text "20171027_06_218_011_00071_2" "c:\1\1\*.jpg"'
MsgBox(0,"ИНФОРМАЦИЯ",$Test)
;ConsoleWrite(@comspec&' /k "' & $XnViewpath & '" -o "' & $Putgotovie & '5555.jpg' '-text_font "MS Shell Dlg 2" 32 -text_color 0 0 0 -text_back 255 255 255 -text_flag bottom-right -text_pos -30 0 -text_rotation 0 -text "MFCPFR_20171027_06_218_011_00071_2"' &$Putraspakovki&'\MFCPFR_20171027_06_218_011_00071_2\*.jpg'',"")
ConsoleWrite(@comspec&' /k "' & $XnViewpath & '" -o ' & $Putgotovie &  $Test)
 

pvnn

Осваивающий
Сообщения
305
Репутация
32
Через ShellExecute у меня работает (пути свои подставил):
Код:
$XnViewPath='c:\Program Files\XnView\nconvert.exe'
$Parameters=' -o "c:\1\new.jpg" -text_font "MS Shell Dlg 2" 32 -text_color 0 0 0 -text_back 255 255 255 -text_flag bottom-right -text_pos -30 0 -text_rotation 0 -text "ИМЯ ПАПКИ" "c:\1\5.jpg"'
ShellExecute($XnViewPath,$Parameters)


InnI, у меня через Run не отрабатывается, хотя и нет ошибок, интересно почему?
Код:
$Command='"c:\Program Files\XnView\nconvert.exe" -o "c:\1\new.jpg" -text_font "MS Shell Dlg 2" 32 -text_color 0 0 0 -text_back 255 255 255 -text_flag bottom-right -text_pos -30 0 -text_rotation 0 -text "Имя" "c:\1\5.jpg"'
ConsoleWrite($Command&@CRLF)
RunWait(@COMSPEC & ' /c '&$Command,"")
MsgBox(0,'',@error)

Если копирую ту же строку в CMD, то работает:
Код:
"c:\Program Files\XnView\nconvert.exe" -o "c:\1\new.jpg" -text_font "MS Shell Dlg 2" 32 -text_color 0 0 0 -text_back 255 255 255 -text_flag bottom-right -text_pos -30 0 -text_rotation 0 -text "Имя" "c:\1\5.jpg"
 
Автор
E

Ed_Vard

Новичок
Сообщения
19
Репутация
0
pvnn спасибо за ответ
Дело в том, что пути к папкам и ИМЯ ПАПКИ меняется - поэтому я и вынес их в переменные в первом варианте:
Общая идея такова: Из программы выгружаются архивы в папку:
Код:
$Putvigrugzki = 'E:\MFC\' & $Date & '\1_архив\'

Затем эти архивы распаковываются в паку:
Код:
$Putraspakovki = 'E:\MFC\' & $Date & '\2_распакован\'

они распаковываться в папки с именами архивов в которых находятся файлы с изображениями.
Затем создается массив имен папок для подстановки в пути для обработки изображений, а также в переменную ИМЯ ПАПКИ - для нанесения на изображение, скрипт пробегает по всем папкам и обработанные изображения помещаются в следующую папку уже просто файлами без папок.
Код:
$Putgotovie = 'E:\MFC\' & $Date & '\3_готов\'

Поэтому вариант с RunWait(@COMSPEC кажется более предпочтительным - к тому же можно не показывать окно cmd при обработке - но не могу разобраться как это правильно записать команду CMD в autoit.
И да - присутствует кирилица в путях - но если их поместить в кавычки - то по идее они высылаются правильно, ну или имена папок назвать по другому - что не хотелось бы.
Код:
#include <Array.au3>
#include <WinAPIEx.au3>
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
Opt("WinTitleMatchMode", -2)

$Date = @YEAR & @MON & @MDAY
DirCreate('E:\MFC\' & $Date & '\1_архив')
DirCreate('E:\MFC\' & $Date & '\2_распакован')
DirCreate('E:\MFC\' & $Date & '\3_готов')
$Putvigrugzki = 'E:\MFC\' & $Date & '\1_архив\'
$Putraspakovki = 'E:\MFC\' & $Date & '\2_распакован\'
$Putgotovie = 'E:\MFC\' & $Date & '\3_готов\'
$7zpath = ('"c:\Program Files\7-Zip\7z"') ;путь к установленному архиватору 7z
$XnViewpath = ("c:\install\Portable\XnView\nconvert") ;путь к конвертеру изображений

Dim $FileList[1]

$First = FileFindFirstFile($Putraspakovki&'*.*')
If @error Then Exit MsgBox(0, 'Ощибка', 'Такой папки нет !')

While 1
    $Next = FileFindNextFile($First)
    If @error Then ExitLoop
    _ArrayAdd($FileList, $Next)
WEnd

;_ArrayDisplay($FileList)

For $i = 1 To UBound ($FileList) - 1
    RunWait(@comspec&' /k "' & $XnViewpath & '" -o ' & $Putgotovie & '5555.jpg text_font "MS Shell Dlg 2" 32 -text_color 0 0 0 -text_back 255 255 255 -text_flag bottom-right -text_pos -30 0 -text_rotation 0 -text '&$FileList[$i]&' '&$Putraspakovki&$FileList[$i]&'*.jpg',"")
Next
 

pvnn

Осваивающий
Сообщения
305
Репутация
32
Ed_Vard а у вас вообще RunWait работает с вашими параметрами?
Посмотрите мой код выше:
Код:
RunWait(@COMSPEC & ' /c '&$Command,"")

Здесь я просто пытаюсь обработать конкретный файл.
RunWait отрабатывает без ошибок, но CMD команда не выполнятся. У вас выполняется? Поставьте для примера пути без пробелов и русских букв.

А вот ShellExecute у меня работает.
Просто поменяйте ваш RunWait на ShellExecute, если нужно скрыть окно, то используйте @SW_HIDE
 
Автор
E

Ed_Vard

Новичок
Сообщения
19
Репутация
0
pvnn сказал(а):
Ed_Vard а у вас вообще RunWait работает с вашими параметрами?
Нет - RunWait выполняется частично - т.е. вот эта часть RunWait(@comspec&' /k "' & $XnViewpath & '" -o ' & $Putgotovie & '5555.jpg') выполняется до ошибки параметров в не зависимости от пробелов и русских букв, а вот если добавлять дальше - то уже пишет неправильный путь, команда - но я думаю - что я не правильно расставляю кавычки.

В первом посте я писал что CMD команда отрабатывает нормально.


Добавлено:
Сообщение автоматически объединено:

pvnn сказал(а):
Ed_Vard а у вас вообще RunWait работает с вашими параметрами?
Посмотрите мой код выше:
Код:
RunWait(@COMSPEC & ' /c '&$Command,"")

Ваш вот этот вариант у меня тоже не работает - вываливается в ошибку CMD.

pvnn сказал(а):
Через ShellExecute у меня работает (пути свои подставил):
Код:
$XnViewPath='c:\Program Files\XnView\nconvert.exe'
$Parameters=' -o "c:\1\new.jpg" -text_font "MS Shell Dlg 2" 32 -text_color 0 0 0 -text_back 255 255 255 -text_flag bottom-right -text_pos -30 0 -text_rotation 0 -text "ИМЯ ПАПКИ" "c:\1\5.jpg"'
ShellExecute($XnViewPath,$Parameters)
Вот этот вариант отрабатывает отлично даже если несколько файлов в папке с исходными изображениями присутствуют, но ИМЯ ПАПКИ на изображении отображается "кракозябрами" - но это не критично пока что.
- сейчас попробую адаптировать по то что мне надо!
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Ed_Vard [?]
ConsoleWrite ничего не выдает
Нужно запускать скрипт прямо из редактора SciTE по F5.

pvnn [?]
через Run не отрабатывается
В вашем случае cmd.exe также путается в кавычках, как и Ed_Vard :smile: Пробуйте так
Код:
$Command='"c:\Program Files\XnView\nconvert.exe" -o "c:\1\new.jpg" -text_font "MS Shell Dlg 2" 32 -text_color 0 0 0 -text_back 255 255 255 -text_flag bottom-right -text_pos -30 0 -text_rotation 0 -text "Имя" "c:\1\5.jpg"'
RunWait(@COMSPEC & ' /c ' & '"' & $Command & '"')


А вообще этой утилите @comspec не нужен. Вот так тоже работает (и проблем с кавычками меньше)
Код:
$Command='"c:\Program Files\XnView\nconvert.exe" -o "c:\1\new.jpg" -text_font "MS Shell Dlg 2" 32 -text_color 0 0 0 -text_back 255 255 255 -text_flag bottom-right -text_pos -30 0 -text_rotation 0 -text "Имя" "c:\1\5.jpg"'
RunWait($Command)
 
Автор
E

Ed_Vard

Новичок
Сообщения
19
Репутация
0
InnI, pvnn
Большое Вам спасибо за помощь, да - действительно не нужен @comspec

Итоговый вариант всего действа работающий выглядит так

Код:
#include <Array.au3>
#include <WinAPIEx.au3>

$Date = @YEAR & @MON & @MDAY
$Putraspakovki = 'E:\MFC\' & $Date & '\2_распакован\'
$Putgotovie = 'E:\MFC\' & $Date & '\3_готов\'
$XnViewpath = ("c:\install\Portable\XnView\nconvert") ;путь к конвертеру изображений

Dim $FileList[1]

$First = FileFindFirstFile($Putraspakovki&'*.*')
If @error Then Exit MsgBox(0, 'Ощибка', 'Такой папки нет !')

While 1
    $Next = FileFindNextFile($First)
    If @error Then ExitLoop
    _ArrayAdd($FileList, $Next)
WEnd

For $i = 1 To UBound ($FileList) - 1
	$Parameters=' -o "'&$Putgotovie&'new_'&$i&'.jpg" -ratio -rtype lanczos -rflag decr -resize shortest 594 -text_font "Arial Black" 14 -text_color 0 0 0 -text_back 255 255 255 -text_flag bottom-right -text_pos -30 0 -text_rotation 0 -text "'&$FileList[$i]&'" -ratio -rtype lanczos -resize 800 1131 "'&$Putraspakovki&$FileList[$i]&'\*.jpg"'
	ShellExecuteWait($XnViewPath,$Parameters,"","",@SW_HIDE)
Next
Exit


И попутный вопрос - а возможно как то реализовать чтобы имена обработанных изображений были вот такого вида
new_01.jpg
new_02.jpg
new_03.jpg
.....
new_10.jpg
new_11.jpg

сейчас они вот так выдаются
new_1.jpg
new_2.jpg
new_3.jpg
.....
new_10.jpg
new_11.jpg
 
Автор
E

Ed_Vard

Новичок
Сообщения
19
Репутация
0
InnI pvnn

Спасибо за оказанную помощь!
 
Верх