Как запускать командную строку cmd ?

squall1988

Client
Регистрация
02.04.2014
Сообщения
24
Благодарностей
1
Баллы
3
Здравствуйте как в zennо запустить cmd чтобы в командной строке можно было прописать значение из переменной, чтобы не создавать много батников?
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 706
Баллы
113
сохраните данные прям в проекте в батник с нужным текстом и запустите его.
 
  • Спасибо
Реакции: squall1988

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 100
Баллы
113

Вложения

  • Спасибо
Реакции: ильяsffse и squall1988

squall1988

Client
Регистрация
02.04.2014
Сообщения
24
Благодарностей
1
Баллы
3
сохраните данные прям в проекте в батник с нужным текстом и запустите его.
А как это сделать и мне это нужно,чтоб plink подключался и в командной строке дописывались логин/пароль/ адрес и текст их переменных
 

squall1988

Client
Регистрация
02.04.2014
Сообщения
24
Благодарностей
1
Баллы
3
Я наверное не так вопрос сформулировал, у меня есть батник который из директории запускает командную строку и как у вас сходу получается сразу текст в батник сохранять, я просто в этом нубас)
 

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 100
Баллы
113
В поле "Что записать", пишете свои данные или можно создать переменную с этими данными и прописывать ее; в поле "Путь к файлу" задаете название и расширение ставите .bat (всё как на скрине).
А как подключать Plink, в интернете все есть.
 

squall1988

Client
Регистрация
02.04.2014
Сообщения
24
Благодарностей
1
Баллы
3
В поле "Что записать", пишете свои данные или можно создать переменную с этими данными и прописывать ее, в поле "Путь к файлу" задаете название и расширение ставите . bat (как на скрине)
А как подключать Plink, в интернете все есть.
У меня получается в ручном режиме все это делать и через готовые батники где прописаны уже настройки, или приходится их переставлять в путях
http://prntscr.com/727w7d
 

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 100
Баллы
113
В поле "Путь к файлу" пропишите любой путь, какой нужно, в той директории батник и создастся.
 

squall1988

Client
Регистрация
02.04.2014
Сообщения
24
Благодарностей
1
Баллы
3
В поле "Путь к файлу" пропишите любой путь, какой нужно, в той директории батник и создастся.
Они у меня уже созданные есть, я так понимаю это вы предлагаете аналог создания бата в ручную, а мне нужно,чтобы даттые дописывались в командной строке после запуска самостоятельно, в общем просто любые значения, а то я не знаю как это правильно делать
 

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 100
Баллы
113
1. Экшен "Файлы" > "Взять текст", прописываете путь до своего батника, данные кладете в переменную, напр., {-Variable.Bat-}
2. Экшен "Файлы" > "Записать текст", в поле "Что писать" пишете {-Variable.Bat-} и дописываете нужные значения (так же можно из переменной). В поле"Путь к файлу" пишете тот же самый путь и название, что в п.1. Галочки в чекбоксах "Дописать файл" и "Записать перенос" НЕ ставите. При этом данные в вашем батнике перезапишутся.
Данные в файлах .bat должны быть в кодировке UTF-8.
 
  • Спасибо
Реакции: squall1988

squall1988

Client
Регистрация
02.04.2014
Сообщения
24
Благодарностей
1
Баллы
3
1. Экшен "Файлы" > "Взять текст", прописываете путь до своего батника, данные кладете в переменную, напр., {-Variable.Bat-}
2. Экшен "Файлы" > "Записать текст", в поле "Что писать" пишете {-Variable.Bat-} и дописываете нужные значения (так же можно из переменной). В поле"Путь к файлу" пишете тот же самый путь и название, что в п.1. Галочки в чекбоксах "Дописать файл" и "Записать перенос" НЕ ставите. При этом данные в вашем батнике перезапишутся.
Данные в файлах .bat должны быть в кодировке UTF-8.
Большое спасибо за подробный ответ и уделенное время, ваш способ тоже помог и он рабочий, у меня просто был батник на открытие командной строки из папки с plink , и он не воспринимал команды записанные в параметрах запуска вообще,а если запускать cmd из sistem32 то он воспринимает команды если прописывать cmd /K или /С и дальнейший текст спасибо за помощь. Как дописывать в командной строке с папкой plink или любой другой папкой непонятно=)
 

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 100
Баллы
113
Как дописывать в командной строке с папкой plink или любой другой папкой непонятно=)
Ну вот как на скрине, допустим, запуск Mozilla Firefox: start "" "C:\Program Files (x86)\Mozilla Firefox\firefox.exe"
Прописываете таким образом путь к своему .exe и дописываете параметры.
 

squall1988

Client
Регистрация
02.04.2014
Сообщения
24
Благодарностей
1
Баллы
3
Ну вот как на скрине, допустим, запуск Mozilla Firefox: start "" "C:\Program Files (x86)\Mozilla Firefox\firefox.exe"
Прописываете таким образом путь к своему .exe и дописываете параметры.
Вот в том то и дело я прописываю E:\bat\opencmd.bat
Запускается командная строка и на экране прописан путь E:\bat> и дальше чтобы я не прописывал в параметрах запуска это не выводится на экран,а открывается так же пустым и надо прописывать все самому вручную http://prntscr.com/7296m8
сам бат файл содержит ток текст
@echo off
cmd.exe /K
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 706
Баллы
113
вы сам батник заполните нужными данными. дополнительные параметры не в постере должны быть в этом случае. а все должно писаться внутри батника
 

avtostopshik

Client
Регистрация
09.09.2016
Сообщения
756
Благодарностей
135
Баллы
43
А кто-нибудь знает, как получить ответ из командной строки на введённую команду?
 

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 367
Благодарностей
3 292
Баллы
113
как получить ответ из командной строки на введённую команду?
C#:
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo.CreateNoWindow = true;
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.StandardOutputEncoding = Encoding.GetEncoding(866);
p.StartInfo.FileName = @"ping"; // путь к батнику или exe
//p.StartInfo.Arguments = @"8.8.8.8"; // его параметры
p.Start();

string output = p.StandardOutput.ReadToEnd();
p.WaitForExit(); // ожидание завершения процесса

return output;
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
19 443
Благодарностей
8 672
Баллы
113
А кто-нибудь знает, как получить ответ из командной строки на введённую команду?
Можно попробовать использовать перенаправление вывода, например так:
запускать bat-ник с содержимым: команда >filename.txt
и потом парсить получившийся текстовик.

Но предыдущее решение от @Zymlex конечно же круче и проще в использовании. :-)
 
  • Спасибо
Реакции: Yuriy Zymlex

avtostopshik

Client
Регистрация
09.09.2016
Сообщения
756
Благодарностей
135
Баллы
43
C#:
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo.CreateNoWindow = true;
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.StandardOutputEncoding = Encoding.GetEncoding(866);
p.StartInfo.FileName = @"ping"; // путь к батнику или exe
//p.StartInfo.Arguments = @"8.8.8.8"; // его параметры
p.Start();

string output = p.StandardOutput.ReadToEnd();
p.WaitForExit(); // ожидание завершения процесса

return output;
Так как мне нужно получить ответ из командной строки, то я указываю вот это:
Код:
p.StartInfo.FileName = путь до cmd . exe;
с нужными параметрами. Но когда доходит до строки

Код:
string output = p.StandardOutput.ReadToEnd();
зеннопостер зависает напрочь.
Можешь сказать, что тут не так?
 

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 367
Благодарностей
3 292
Баллы
113
  • Спасибо
Реакции: avtostopshik

avtostopshik

Client
Регистрация
09.09.2016
Сообщения
756
Благодарностей
135
Баллы
43
если же туда надо и ещё что-то отправлять, то это уже надо извращаться (как некоторые).
Ну это точно извращение)) ок, он не может дождаться, когда процесс завершится, потому что тот не завершается. Есть ли другие способы, не из скрина, чтобы завершить-таки запущенный процесс?))
 

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 367
Благодарностей
3 292
Баллы
113
тот не завершается
Что вообще за процесс? Как его завершаете в обычном случае?
Есть ли другие способы, не из скрина, чтобы завершить-таки запущенный процесс?))
Не ждать завершения, получать и парсить ответ построчно, после получения нужной инфы - убивать процесс.
C#:
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo.CreateNoWindow = true;
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.StandardOutputEncoding = Encoding.GetEncoding(866);
p.StartInfo.FileName = @"ping"; // путь к exe или батнику
p.StartInfo.Arguments = @"8.8.8.8"; // его параметры
p.Start();

//p.StandardInput.WriteLine("ping 8.8.8.8 & exit"); // ввод команды
string output = "";
for(int i = 0; i < 30; i++){
    output += p.StandardOutput.ReadLine() + "\r\n";
    if(output.Contains("Статистика Ping")){ // Последняя строка получаемого текста
        try{p.Kill();} catch {} // убийство процесса с игнорированием ошибок, если процесс уже завершается
        return output;
    }
    Thread.Sleep(500);
}
throw new Exception("Не удалось.");
При наличии C# аналога, подобное - не нужный изврат.
 
Последнее редактирование:

avtostopshik

Client
Регистрация
09.09.2016
Сообщения
756
Благодарностей
135
Баллы
43
Что вообще за процесс? Как его завершаете в обычном случае?

Не ждать завершения, получать и парсить ответ построчно, после получения нужной инфы - убивать процесс.
C#:
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo.CreateNoWindow = true;
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.StandardOutputEncoding = Encoding.GetEncoding(866);
p.StartInfo.FileName = @"cmd"; // путь к exe или батнику
//p.StartInfo.Arguments = @"8.8.8.8"; // его параметры
p.Start();

//p.StandardInput.WriteLine("ping 8.8.8.8 & exit"); // ввод команды
string output = "";
for(int i = 0; i < 30; i++){
    output += p.StandardOutput.ReadLine() + "\r\n";
    if(output.Contains("Статистика Ping")){ // Последняя строка получаемого текста
        try{p.Kill();} catch {} // убийство процесса с игнорированием ошибок, если процесс уже завершается
        return output;
    }
    Thread.Sleep(500);
}
throw new Exception("Не удалось.");
При наличии C# аналога, подобное - не нужный изврат.
Но даже с этим кодом зенка зависает. Неужели у тебя не так? В цикле доходит до пятого круга и останавливается на строке
Код:
output += p.StandardOutput.ReadLine() + "\r\n";
 

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 367
Благодарностей
3 292
Баллы
113
Последнее редактирование:

avtostopshik

Client
Регистрация
09.09.2016
Сообщения
756
Благодарностей
135
Баллы
43

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 367
Благодарностей
3 292
Баллы
113
Последнее редактирование:

avtostopshik

Client
Регистрация
09.09.2016
Сообщения
756
Благодарностей
135
Баллы
43
Теперь рабочий, но это не имеет смысла без элементарного чтения комментариев и правки под вывод нужного exe...
Слушай, кажется получилось. Вот только не совсем. Смотри, у меня такой код:
Код:
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo.CreateNoWindow = true;
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.StandardOutputEncoding = Encoding.GetEncoding(866);
p.StartInfo.FileName = @"cmd . exe"; // путь к exe или батнику
p.StartInfo.Arguments = @"adb -s emulator-5554 shell getprop ro.build.version.release"; // его параметры
p.Start();
//p.StandardInput.WriteLine("ping 8.8.8.8 & exit"); // ввод команды
string output = "";
for(int i = 0; i < 30; i++){
    project.SendInfoToLog(i.ToString());
    output += p.StandardOutput.ReadLine() + "\r\n";
    return output;
    if(!output.Contains("")){ // Последняя строка получаемого текста
        try{p.Kill();} catch {} // убийство процесса с игнорированием ошибок, если процесс уже завершается
        return output;
    }
    Thread.Sleep(500);
}
throw new Exception("Не удалось.");
Сделал вывод результата в середине цикла, потому что в ответе всего одна строка и смысла в цикле нету. Но проблема не в этом, а в том, что ответ пришёл о том, какой версии моя винда. А должен быть ответ какой версии андроид на эмуляторе. Когда руками ввожу в командной строке данную команду, ответ правильный приходит. А тут почему то он как будто не к эмулятору обращался.
Почему так, ты знаешь?
 

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 367
Благодарностей
3 292
Баллы
113

avtostopshik

Client
Регистрация
09.09.2016
Сообщения
756
Благодарностей
135
Баллы
43
Тут как минимум ошибка...
Нет, не совсем. Дело в том, что без пробелов (сам знаешь где) отправить отправить сообщение этот форум не даёт)) пишет, что я заблокирован. Сам попробуй - поймёшь о чём я.
Можно было проще изначально, через https://github.com/quamotion/madb
Блиин, офигенно!! Спасибо!! Сейчас по изучаю данную библиотеку, надеюсь получиться заюзать))
 

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 367
Благодарностей
3 292
Баллы
113
Блиин, офигенно!! Спасибо!! Сейчас по изучаю данную библиотеку, надеюсь получиться заюзать))
Если бы вопрос был изначально по задаче, то и решения было бы адекватное, а не как скрепить 2 костыля и остаться не удивлённым...
 
  • Спасибо
Реакции: dohrelion

avtostopshik

Client
Регистрация
09.09.2016
Сообщения
756
Благодарностей
135
Баллы
43
Если бы вопрос был изначально по задаче, то и решения было бы адекватное, а не как скрепить 2 костыля и остаться не удивлённым...
Да если бы знать заранее о том, что такое решение существует, то и вопросов бы заданных не возникло
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)