Добро пожаловать к нам в гости! Наш сайт посвящён программе NeoBook, с помощью которой вы легко сможете создавать собственные мультимедиа-приложения без необходимости изучать сложные языки программирования! Зарегистрируйтесь, чтобы стать членом нашего сообщества.
Здравствуйте! Имеется программа написанная на CMD для управления Android устройством через ADB. Хочу сделать оболочку и как то визуализировать процесс.
Как корректно запускать CMD команды в VisualNeo через обертывание или через запуск файл.cmd Попробовал два варианта: Первый
Код
Run "[PubDir]Visual_MiTV_Reboot.cmd" "[DownloadProgress]" "LoadComplete+Hidden" "" ""
Но это простые команды и то бывают подвешивают программу, есть ощущение что делаю неправильно.
Основной вопрос как корректно завернуть cmd скрипт в VisualNeo чтобы ничего не висло: корректно отрабатывалось и желательно было визуально понятно, что то типа прогресс бара по ходу выполнения. Спасибо.
Добавлено (18 Мая 2019, 09:55) --------------------------------------------- Забыл добавить, есть скрипты достаточно большие, общий объем программы в cmd порядка 3500 строк.
К сожалению(?), я почти не имел дел с подобными задачами, поэтому не могу точно ответить на вопрос. Попробуйте применить вот эту функцию. А может и этот плагин пригодится (но это только для консольных приложений).
Возможно, более компетентные в данном вопросе коллеги дадут и более вразумительный ответ. - А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
Во первых CMD файл, это не что иное, как выполнение скрипта из командной строки. Другими словами, вам нужно разобрать скрипт в CMD файле и написать его в VisualNeo. Думаю там ничего сложного нет. Просто обращение к консольной программе. Вот именно при обращении к консольной программе и нужно использовать команду Run.
Во вторых, покажите хотя бы для начала файл(ы) CMD, что бы мы смогли разговаривать на одном языке. Не хочешь читать хелп?
Во вторых, покажите хотя бы для начала файл(ы) CMD, что бы мы смогли разговаривать на одном языке.
Код
for /f "usebackq delims=" %%i in ("%~dp0IP.conf") do (set "ipaddress=%%i") adb kill-server adb start-server adb connect %ipaddress%:5555 adb wait-for-device adb shell reboot
самая простая команда, просто перезагрузка устройства! Но не ищет neobook файл IP.conf, даже при переходе cd папка. Переписать готов, но не совсем как оборачивать код именно для cmd команд, поиск по форуму выдает не больше трех полезных постов. Кроме консольных программ я никак не могу больше управлять устройством на android, поэтому другие способы написания программы не рассматриваю, спасибо.
Запускаешь командную строку, вводишь for /? нажимаешь ентер и читаешь мануал к этой команде, чтобы понять что находится в этой строке. У меня нет желания вникать, слишком много читать надо. Или читай здесь. Это обычный цикл, который можно организовать в самой VisualNeo.
Повторяю, от самих файлов CMD нужно отказаться. Там обычный скрипт который выполняет система. Или же наоборот, глубже вникать, как выполняются команды.
Цитатаpolkmomo ()
adb
Это консольное приложение, к которому нужно обращаться как adb.ехе Тоже, в командной строке нужно запустить adb.ехе, или с полным путем к adb.ехе, если в пути есть пробелы, то заключить путь в кавычки с параметром /? или ? или -? или h или -h или /h или вместо h подставить help, чтобы открылась справка с описанием команд и параметров.
Не все так просто, как хотелось бы. Я не знаю правильности написания и выполнения скрипта CMD. Опять, что бы тебе объяснить мне нужно самому все прочитать, вникнуть и после объяснить тебе. Может лучше без посредников?
Я знаю вершки, так сказать основы. Но даже их что бы объяснить, нужно очень много писать.
Читай хелп, пробуй методом тыка, может что то и получится.
Но на сколько я помню, там очень много работы получится, если писать все самому. Если же попробовать обойтись малой кровью и запускать CMD файлы, то попробуй найти информацию, где должны находится файлы, как исполняемые, так и те, к которым обращается CMD файл.
Раз они у тебя не выполняются, или долго выполняются, то значит консоль не может чего то найти, или ждет какого нибудь действия от пользователя. Например нажатия клавиши.
Добавлено (19 Мая 2019, 20:42) ---------------------------------------------
Цитатаpolkmomo ()
("%~dp0IP.conf")
Возможно здесь нужно указать полный путь к файлу dp0IP.conf Но нужно иметь ввиду, что не должно быть пробелов в пути к файлу, возможно не должно быть кириллицы в пути и т.д.
Нужно понимать, что CMD ищет файлы в той папке, где он расположен. VisualNeo тоже ищет файлы в той папке, откуда было запущено приложение, если не был явно указан путь к файлу. Нужно стараться учитывать все нюансы. Не хочешь читать хелп?
set "d=%~dp0AppUser" set "ext=apk" adb kill-server adb start-server adb connect [ipaddress]:5555 adb wait-for-device pushd "%d%" for /f "delims=" %%a in ('dir /a-d/b "*.%ext%"') do adb install "%%a"
то все, хана.
Проценты я понял что нельзя, но как обойти синтаксис neobook? Заворачивать команды в переменные ужасное на мой взгляд решение и не факт что сработает. Где можно посмотреть что можно что нельязя, в справке не нашел. Спасибо.
Не пойму в чем проблема? Попробовал присвоить переменной указанный текст. Все отображается (передается) корректно.
Обрати внимание, в каком виде выглядит текст когда он подается командой.
Код
SetVar "[TextEntry1]" "set [#34]d=%~dp0AppUser[#34][#13]set [#34]ext=apk[#34][#13]adb kill-server[#13]adb start-server[#13]adb connect [ipaddress]:5555[#13]adb wait-for-device[#13]pushd [#34]%d%[#34][#13] for /f [#34]delims=[#34] %%a in ('dir /a-d/b [#34]*.%ext%[#34]') do adb install [#34]%%a[#34][#13]"
Т.е. спецсимволы, в данном случае кавычки [#34] и перенос строки [#13] записываются в виде переменной. Почему проценты нельзя, не понятно. Как пришел к этому выводу?
Цитатаpolkmomo ()
Если например:Код?1234567echo offadb kill-serveradb start-serveradb connect [ipaddress]:5555adb shell rebootadb kill-serverexitто все нормально!
Сомневаюсь что и здесь нормально. Если передается существующее значение переменной [ipaddress], то будет нормально. Если же нужно передать именно строку [ipaddress], то вместо строки [ipaddress] будет пустое место, так как необук видит именно переменную, а не строку [ipaddress]. На сколько я понимаю, переменная [ipaddress] пустая. По этому в командную строку пойдет что то типа: adb connect :5555 вместо adb connect [ipaddress]:5555
Что бы передать именно строку, нужно нужно отправлять в виде adb connect [#91]ipaddress[#93]:5555 тогда в командную строку придет именно строка adb connect [ipaddress]:5555
Читай в справке раздел "Понятия: Команды и Переменные" > "Использование специальных символов"
Со спецсимволами нужно быть осторожней, и стараться проверять, в каком виде их передает необук.
В принципе, ничего сложного. Необук может передавать любые ASCII-коды символов в виде переменных. Например табулятор в необук будет выглядеть как [#09], если нам нужно передать пробел, то можем это сделать написав переменную [#32] и т.д. Не хочешь читать хелп?
Ну я не телепат. Нужно смотреть что ты там делаешь.
Цитатаpolkmomo ()
решил через этот плагин
Это не плагин, а функция. Открой ее в блокноте или в редакторе функций в необук и увидишь что там. Там используется все та же команда Run. Плюс заменяются переносы строк на амперсанд, а на сколько я понял из справки к cmd.exe, должно быть два амперсанда.
Только чтение справки и разбор кода тебе поможет. Набирай в командной строке cmd.exe /? Читай описание. Смотри что у тебя в файлах. Подставляй нужное, удаляй не нужное.
ЦитатаВадим ()
dmCMDLine
Замечательный плагин. С помощью него можно отслеживать ошибки, или наоборот, выполнение.
Добавлено (24 Мая 2019, 18:27) ---------------------------------------------
Цитатаpolkmomo ()
Не взлетело к сожалению!
Ты предлагаешь мне написать пример? К сожалению у меня нет желания устанавливать на комп кучу хлама ради этого примера. Можешь скинуть свой пример, я или кто то еще посмотрит.
Добавлено (24 Мая 2019, 18:33) ---------------------------------------------
ЦитатаВадим ()
не знаю, поможет ли, есть ещё такие плагины:
Они заменяют, или можно сказать дополняют команду Run.
ЦитатаВадим ()
alConsole
У Алиена по моему что то где то не заладилось. Дембель на сколько мне память не изменяет написал плагин dmCMDLine после него. Лично я полностью перешел на него. Причину уже не помню. Не хочешь читать хелп?
Вадим, Через это и пользую! Точнее через просто run, но хотелось бы прям в программе без костылей.
Цитатаmishem ()
У Алиена по моему что то где то не заладилось. Дембель на сколько мне память не изменяет написал плагин dmCMDLine после него. Лично я полностью перешел на него. Причину уже не помню.
Попробую через него реализовать! Там команда простая, файлы которые есть в определенной папке по очереди подставляются для установки на андроид adb install такоето.apk
Добавлено (27 Мая 2019, 16:55) --------------------------------------------- Кстати функия про которую вы говорите не отправлять в cmd больше 7158 знаков или 7 килобайт! Пришлось разбивать на несколько!
Добавлено (30 Мая 2019, 19:39) --------------------------------------------- Программу допилил, много что узнал, решил абсолютно все задачи кроме одной! Этой с..... Не выводит в консоль данный скрипт хоть убей! Опишу по другому Есть папка AppUser, в которой лежат файлы 1.apk, 2.apk, 3.apk и так далее, необходимо передать полный путь этих файлов в команду adb shell install 1.apk по очереди и тд в консоль. Акулы neobook просьба помочь, файл из трех строчек, но не могу реализовать. Спасибо.
Добавлено (30 Мая 2019, 19:49) --------------------------------------------- пример скрипта в neobook
Зачем если все и так работает, как и [ipaddress]:5555 Тем более мне это не нужно, задачу описал выше Есть папка AppUser, в которой лежат файлы 1.apk, 2.apk, 3.apk и так далее, необходимо передать полный путь этих файлов в команду adb shell install 1.apk по очереди и тд в консоль. Акулы neobook просьба помочь, файл из трех строчек, но не могу реализовать.
в команду adb shell install 1.apk по очереди и тд в консоль.
Ниче мне это не дает.
Цитатаpolkmomo ()
Есть папка AppUser
Где она есть? В папке проекта?
Цитатаpolkmomo ()
необходимо передать полный путь этих файлов в команду
Это тебе там на месте понятно, здесь ничего не понятно. Что значит передать полный путь файлов в команду? Если AppUser в папке проекта, то [PubDir]AppUser\1.apk, [PubDir]AppUser\2.apk и т.д.
Но нужно учитывать, что на компе пользователя в [PubDir] могут быть пробелы, по этому путь нужно заключать в кавычки: "[PubDir]AppUser\1.apk"
Цитатаpolkmomo ()
по очереди
Что значит по очереди? Дождаться когда один файл запуститься и после другой запустить, или запускать не дожидаясь?
Твои мысли это твои скакуны, у меня свои скакуны. Думать можем об одном, но по разному. Я понятия не имею что ты там творишь.
Могу только код подсказать как правильно написать, а логику твоего мышления и выполнения программы я не могу не понять, не предугадать.
Цитатаpolkmomo ()
[PubDir]AppUser/com.xiaobaifile.tv.2.7.0.2.RU.apk
Это [PubDir]AppUser\1.apk ?
Цитатаpolkmomo ()
Зачем если все и так работает
За тем, что это иногда не работает. В каких случаях не помню, но на подсознательном уровне в голове сидит, что нужно менять. Не хочешь, не меняй.
Цитатаpolkmomo ()
пример скрипта в neobook
Этот скрипт срабатывает и нужно следом запустить подобный скрипт только с другим именем файла? Ты это делаешь и не работает?
Если да, нужно наверно дождаться что бы первый скрипт отработал и после только запускать второй?
Возможно эти команды для следующих файлов и не нужны? Иначе ты первый файл запустил и следом прибиваешь выполнение процесса.
Давай ка поподробней описывай ситуацию. Что делаешь, как делаешь, что работает, что не работает, как хотелось бы, как получается и т.д. Не хочешь читать хелп?
как правило проблема в некорректной интерпретации путей к файлам/папкам. чтобы отдебажить, вставляй перед командами вызов окна сообщения, куда выводи свои пути [PubDir]AppUser\3.apk и вручную проконтролируй, верный ли путь обрабатывает программа. также не забывай про переменную [CurrentDir] Как задавать вопросы