Передача аргументов в файл .cmd в C#
У меня есть файл.cmd, который запрашивает у пользователя ввод, на основе которого выполняются дальнейшие шаги. Я пытаюсь написать программу для автоматизации этого процесса на C#, чтобы командная строка выполнялась в фоновом режиме (без вывода на экран пользователя / исключения всех действий пользователя), а аргументы передавались. Я сослался на несколько ответов, но не нашел решения. Я уже переходил по ссылкам ниже.
Передача аргументов строки cmd конкретному методу
Передача команды Cmd в приложение C#
Передача аргументов командной строки C# в пакетном файле
Было бы здорово, если бы кто-нибудь мог указать мне правильное направление.
1 ответ
1) Попробуйте отредактировать свой bat / cmd для получения аргументов в C#:
2) Вам нужно отредактировать файл bat / cmd, чтобы получить аргументы C#:
Console.ReadLine()
в С # этоset /p some_var_by_input=
в битах / cmdОтредактируйте в файле bat / cmd, где вам нужно:
set / p input_1 =" Enter some entry: "
Удалите и добавьте к своим аргументам соответствующую трактовку:
set /p input_1 = "Введите какой-либо ввод:"set input_1=%~1Если аргументов больше одного, просто увеличивайте как...
установить "input_2=%~2" установить "input_n=%~n"
Вот пример кода С #, который отправляет 2 аргумента в файл bat / cmd
using System;
using System.Diagnostics;
namespace ConsoleApplication
{
class Program
{
static void Main(string[] args)
{
System.Diagnostics.Process.Start(@"c:\batchfilename.bat", "\"1st\" \"2nd\"");
}
}
}
Обс.: источники C# из @TSSathish, ответ здесь
- Код файла bat с использованием аргументов% 1 и% 2, переданных из C#:
@echo off
%__APPDIR__%mode.com con: cols=60 lines=6
echo/
echo/ your arg_CS[0] == arg_bat[%%1] == %1
echo/ your arg_CS[1] == arg_bat[%%2] == %2
echo/ ________________________________________________________
echo/ Please, press any key for me got to go drink a coffe...
@%__APPDIR__%timeout.exe -1 >nul
- bat / cmd выходы:
Вариант 2. Скрытие окна консоли, передача аргументов и получение выходных данных
- Это изменение из этого ответа / от Brian Rasmussen
using System;
using System.Diagnostics;
namespace ConsoleApplication
{
class Program
{
static void Main(string[] args)
{
var process = new Process();
var startinfo = new ProcessStartInfo(@"c:\batchfilename.bat", "\"1st_arg\" \"2nd_arg\" \"3rd_arg\"");
startinfo.RedirectStandardOutput = true;
startinfo.UseShellExecute = false;
process.StartInfo = startinfo;
process.OutputDataReceived += (sender, argsx) => Console.WriteLine(argsx.Data); // do whatever processing you need to do in this handler
process.Start();
process.BeginOutputReadLine();
process.WaitForExit();
}
}
}
Это основано на моем ограниченном понимании английского языка, поэтому, если это не так, извините, и, если возможно, сообщите мне...