- Регистрация
- 02.04.2014
- Сообщения
- 24
- Благодарностей
- 1
- Баллы
- 3
Здравствуйте как в zennо запустить cmd чтобы в командной строке можно было прописать значение из переменной, чтобы не создавать много батников?
Здравствуйте как в zennо запустить cmd чтобы в командной строке можно было прописать значение из переменной, чтобы не создавать много батников?
А как это сделать и мне это нужно,чтоб plink подключался и в командной строке дописывались логин/пароль/ адрес и текст их переменныхсохраните данные прям в проекте в батник с нужным текстом и запустите его.
У меня получается в ручном режиме все это делать и через готовые батники где прописаны уже настройки, или приходится их переставлять в путяхВ поле "Что записать", пишете свои данные или можно создать переменную с этими данными и прописывать ее, в поле "Путь к файлу" задаете название и расширение ставите . bat (как на скрине)
А как подключать Plink, в интернете все есть.
Они у меня уже созданные есть, я так понимаю это вы предлагаете аналог создания бата в ручную, а мне нужно,чтобы даттые дописывались в командной строке после запуска самостоятельно, в общем просто любые значения, а то я не знаю как это правильно делатьВ поле "Путь к файлу" пропишите любой путь, какой нужно, в той директории батник и создастся.
Большое спасибо за подробный ответ и уделенное время, ваш способ тоже помог и он рабочий, у меня просто был батник на открытие командной строки из папки с plink , и он не воспринимал команды записанные в параметрах запуска вообще,а если запускать cmd из sistem32 то он воспринимает команды если прописывать cmd /K или /С и дальнейший текст спасибо за помощь. Как дописывать в командной строке с папкой plink или любой другой папкой непонятно=)1. Экшен "Файлы" > "Взять текст", прописываете путь до своего батника, данные кладете в переменную, напр., {-Variable.Bat-}
2. Экшен "Файлы" > "Записать текст", в поле "Что писать" пишете {-Variable.Bat-} и дописываете нужные значения (так же можно из переменной). В поле"Путь к файлу" пишете тот же самый путь и название, что в п.1. Галочки в чекбоксах "Дописать файл" и "Записать перенос" НЕ ставите. При этом данные в вашем батнике перезапишутся.
Данные в файлах .bat должны быть в кодировке UTF-8.
Ну вот как на скрине, допустим, запуск Mozilla Firefox: start "" "C:\Program Files (x86)\Mozilla Firefox\firefox.exe"Как дописывать в командной строке с папкой plink или любой другой папкой непонятно=)
Вот в том то и дело я прописываю E:\bat\opencmd.batНу вот как на скрине, допустим, запуск Mozilla Firefox: start "" "C:\Program Files (x86)\Mozilla Firefox\firefox.exe"
Прописываете таким образом путь к своему .exe и дописываете параметры.
как получить ответ из командной строки на введённую команду?
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;
Можно попробовать использовать перенаправление вывода, например так:А кто-нибудь знает, как получить ответ из командной строки на введённую команду?
Так как мне нужно получить ответ из командной строки, то я указываю вот это: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();
Можешь сказать, что тут не так?
если же туда надо и ещё что-то отправлять, то это уже надо извращаться (как некоторые).// ожидание завершения процесса
Ну это точно извращение)) ок, он не может дождаться, когда процесс завершится, потому что тот не завершается. Есть ли другие способы, не из скрина, чтобы завершить-таки запущенный процесс?))если же туда надо и ещё что-то отправлять, то это уже надо извращаться (как некоторые).
Что вообще за процесс? Как его завершаете в обычном случае?тот не завершается
Не ждать завершения, получать и парсить ответ построчно, после получения нужной инфы - убивать процесс.Есть ли другие способы, не из скрина, чтобы завершить-таки запущенный процесс?))
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# аналога, подобное - не нужный изврат.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("Не удалось.");
output += p.StandardOutput.ReadLine() + "\r\n";
Значит не тот текст указан для поиска.Но даже с этим кодом зенка зависает.
Скинь свой код.Неужели у тебя не так?
Так я ведь даже ничего не изменял из последнего примера. Как есть запустил, и такая беда.Скинь свой код.
Теперь рабочий, но это не имеет смысла без элементарного чтения комментариев и правки под запуск и вывод целевого exe...Как есть запустил, и такая беда.
Слушай, кажется получилось. Вот только не совсем. Смотри, у меня такой код:Теперь рабочий, но это не имеет смысла без элементарного чтения комментариев и правки под вывод нужного 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("Не удалось.");
adb -s emulator-5554 shell
Можно было проще изначально, через https://github.com/quamotion/madbПочему так, ты знаешь?
Тут как минимум ошибка...@"cmd . exe"
Нет, не совсем. Дело в том, что без пробелов (сам знаешь где) отправить отправить сообщение этот форум не даёт)) пишет, что я заблокирован. Сам попробуй - поймёшь о чём я.Тут как минимум ошибка...
Блиин, офигенно!! Спасибо!! Сейчас по изучаю данную библиотеку, надеюсь получиться заюзать))Можно было проще изначально, через https://github.com/quamotion/madb
Если бы вопрос был изначально по задаче, то и решения было бы адекватное, а не как скрепить 2 костыля и остаться не удивлённым...Блиин, офигенно!! Спасибо!! Сейчас по изучаю данную библиотеку, надеюсь получиться заюзать))
Да если бы знать заранее о том, что такое решение существует, то и вопросов бы заданных не возниклоЕсли бы вопрос был изначально по задаче, то и решения было бы адекватное, а не как скрепить 2 костыля и остаться не удивлённым...