Автор Тема: записать cmd выражение в autoit  (Прочитано 225 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Ed_Vard [?]

  • Новичок
  • *
  • Сообщений: 19
  • Репутация: 0
  • Пол: Мужской
    • Награды
записать cmd выражение в autoit
« Создано: Ноябрь 14, 2017, 17:31:30 »
Добрый день, уважаемые форумчане!
Прошу помощи.
необходимо записать следующую команду из 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"
вот такой вариант постоянно упирается в ошибку пути
Код: AutoIt [Выделить]
$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"',"")


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

Русское сообщество AutoIt

записать cmd выражение в autoit
« Отправлен: Ноябрь 14, 2017, 17:31:30 »

Оффлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 3574
  • Репутация: 944
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: записать cmd выражение в autoit
« Ответ #1, Отправлен: Ноябрь 14, 2017, 17:44:36 »
Ed_Vard
Замените RunWait на ConsoleWrite и посмотрите, что у вас получилось. Я вижу две проблемы: кавычка перед 5555.jpg и кавычка в самом конце.

Оффлайн Ed_Vard [?]

  • Новичок
  • *
  • Сообщений: 19

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
Re: записать cmd выражение в autoit
« Ответ #2, Отправлен: Ноябрь 14, 2017, 22:46:36 »
Ed_Vard
Замените RunWait на ConsoleWrite и посмотрите, что у вас получилось. Я вижу две проблемы: кавычка перед 5555.jpg и кавычка в самом конце.
Спасибо за ответ, но я что то совсем запутался с этими кавычками.
Немного переделал - но это уже "блуждание в потемках" - т.к. не совсем понимаю принцип использования кавычек, но все равно не работает,  ConsoleWrite ничего не выдает.
Код: AutoIt [Выделить]
$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 [?]

  • Осваивающий
  • **
  • Сообщений: 226
  • Репутация: 20
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: записать cmd выражение в autoit
« Ответ #3, Отправлен: Ноябрь 15, 2017, 08:20:58 »
Через ShellExecute у меня работает (пути свои подставил):
Код: AutoIt [Выделить]
$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 не отрабатывается, хотя и нет ошибок, интересно почему?
Код: AutoIt [Выделить]
$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"
« Последнее редактирование: Ноябрь 15, 2017, 10:07:36 от pvnn »

Русское сообщество AutoIt

Re: записать cmd выражение в autoit
« Ответ #3 Отправлен: Ноябрь 15, 2017, 08:20:58 »

Оффлайн Ed_Vard [?]

  • Новичок
  • *
  • Сообщений: 19

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
Re: записать cmd выражение в autoit
« Ответ #4, Отправлен: Ноябрь 15, 2017, 10:34:41 »
pvnn спасибо за ответ
Дело в том, что пути к папкам и ИМЯ ПАПКИ меняется - поэтому я и вынес их в переменные в первом варианте:
Общая идея такова: Из программы выгружаются архивы в папку:
Код: AutoIt [Выделить]
$Putvigrugzki = 'E:\MFC\' & $Date & '\1_архив\'

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

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

Поэтому вариант с RunWait(@COMSPEC кажется более предпочтительным - к тому же можно не показывать окно cmd при обработке - но не могу разобраться как это правильно записать команду CMD в autoit.
И да - присутствует кирилица в путях - но если их поместить в кавычки - то по идее они высылаются правильно, ну или имена папок назвать по другому - что не хотелось бы.
Код: 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
 

« Последнее редактирование: Ноябрь 15, 2017, 10:48:04 от Ed_Vard »

Оффлайн pvnn [?]

  • Осваивающий
  • **
  • Сообщений: 226
  • Репутация: 20
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: записать cmd выражение в autoit
« Ответ #5, Отправлен: Ноябрь 15, 2017, 11:10:42 »
Ed_Vard а у вас вообще RunWait работает с вашими параметрами?
Посмотрите мой код выше:
Код: AutoIt [Выделить]
RunWait(@COMSPEC & ' /c '&$Command,"")

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

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

Оффлайн Ed_Vard [?]

  • Новичок
  • *
  • Сообщений: 19

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
Re: записать cmd выражение в autoit
« Ответ #6, Отправлен: Ноябрь 15, 2017, 11:19:01 »
Ed_Vard а у вас вообще RunWait работает с вашими параметрами?
Нет - RunWait выполняется частично - т.е. вот эта часть   RunWait(@comspec&' /k "' & $XnViewpath & '" -o ' & $Putgotovie & '5555.jpg') выполняется до ошибки параметров в не зависимости от пробелов и русских букв, а вот если добавлять дальше - то уже пишет неправильный путь, команда - но я думаю - что я не правильно расставляю кавычки.

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


Добавлено: Ноябрь 15, 2017, 11:41:13
Ed_Vard а у вас вообще RunWait работает с вашими параметрами?
Посмотрите мой код выше:
Код: AutoIt [Выделить]
RunWait(@COMSPEC & ' /c '&$Command,"")


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

Через ShellExecute у меня работает (пути свои подставил):
Код: AutoIt [Выделить]
$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)
 

Вот этот вариант отрабатывает отлично даже если несколько файлов в папке с исходными изображениями присутствуют, но ИМЯ ПАПКИ на изображении отображается "кракозябрами" - но это не критично пока что.
- сейчас попробую адаптировать по то что мне надо!
« Последнее редактирование: Ноябрь 15, 2017, 11:52:54 от Ed_Vard, Причина: Объединение сообщений »

Оффлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 3574
  • Репутация: 944
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: записать cmd выражение в autoit
« Ответ #7, Отправлен: Ноябрь 15, 2017, 12:20:05 »
Ed_Vard  [?]
Цитировать
ConsoleWrite ничего не выдает
Нужно запускать скрипт прямо из редактора SciTE по F5.

pvnn  [?]
Цитировать
через Run не отрабатывается
В вашем случае cmd.exe также путается в кавычках, как и Ed_Vard :) Пробуйте так
Код: AutoIt [Выделить]
$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 не нужен. Вот так тоже работает (и проблем с кавычками меньше)
Код: AutoIt [Выделить]
$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)



Русское сообщество AutoIt

Re: записать cmd выражение в autoit
« Ответ #7 Отправлен: Ноябрь 15, 2017, 12:20:05 »

Оффлайн Ed_Vard [?]

  • Новичок
  • *
  • Сообщений: 19

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
Re: записать cmd выражение в autoit
« Ответ #8, Отправлен: Ноябрь 15, 2017, 15:32:40 »
InnI, pvnn
Большое Вам спасибо за помощь, да - действительно не нужен  @comspec

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

Код: AutoIt [Выделить]
#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

Оффлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 3574
  • Репутация: 944
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: записать cmd выражение в autoit
« Ответ #9, Отправлен: Ноябрь 15, 2017, 15:42:18 »
Ed_Vard  [?]
Цитировать
такого вида
Код: AutoIt [Выделить]
...'new_' & StringFormat("%02d", $i) & '.jpg"...


Оффлайн Ed_Vard [?]

  • Новичок
  • *
  • Сообщений: 19

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
Re: записать cmd выражение в autoit
« Ответ #10, Отправлен: Сегодня в 16:29:32 »
InnI pvnn

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

Русское сообщество AutoIt

Re: записать cmd выражение в autoit
« Ответ #10 Отправлен: Сегодня в 16:29:32 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
17 Ответов
9397 Просмотров
Последний ответ Январь 12, 2011, 06:05:45
от Kalisnik
9 Ответов
5729 Просмотров
Последний ответ Июнь 14, 2011, 09:22:17
от Alex Bit
10 Ответов
5177 Просмотров
Последний ответ Сентябрь 10, 2013, 07:31:48
от pvnn
1 Ответов
1510 Просмотров
Последний ответ Ноябрь 22, 2013, 15:57:07
от inververs
2 Ответов
1819 Просмотров
Последний ответ Январь 30, 2014, 22:15:36
от InnI
1 Ответов
1284 Просмотров
Последний ответ Март 09, 2014, 20:35:13
от Zaramot
3 Ответов
947 Просмотров
Последний ответ Август 03, 2014, 19:11:10
от CreatoR
2 Ответов
807 Просмотров
Последний ответ Октябрь 24, 2014, 09:38:57
от zigzagrus79
2 Ответов
1316 Просмотров
Последний ответ Декабрь 17, 2014, 15:35:38
от ahees
0 Ответов
559 Просмотров
Последний ответ Декабрь 17, 2014, 05:37:43
от madmasles