Передача аргументов в файл .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. Скрытие окна консоли, передача аргументов и получение выходных данных

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();
        }
    }
}

Это основано на моем ограниченном понимании английского языка, поэтому, если это не так, извините, и, если возможно, сообщите мне...


Другие вопросы по тегам