Uruchamianie Poleceń Wiersza Polecenia

Czy Jest jakiś sposób na uruchamianie poleceń wiersza poleceń z poziomu aplikacji C#? Jeśli tak to jak bym zrobił:

copy /b Image1.jpg + Archive.rar Image2.jpg

To w zasadzie osadza plik RAR w obrazie JPG. Zastanawiałem się tylko, czy nie ma sposobu, aby zrobić to automatycznie w C#.

Author: Dominik, 2009-09-24

10 answers

To wszystko co musisz zrobić uruchom polecenia powłoki Z C #

string strCmdText;
strCmdText= "/C copy /b Image1.jpg + Archive.rar Image2.jpg";
System.Diagnostics.Process.Start("CMD.exe",strCmdText);

EDIT:

Ma to na celu ukrycie okna cmd.

System.Diagnostics.Process process = new System.Diagnostics.Process();
System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
startInfo.FileName = "cmd.exe";
startInfo.Arguments = "/C copy /b Image1.jpg + Archive.rar Image2.jpg";
process.StartInfo = startInfo;
process.Start();

Edytuj: 2

Ważne jest to, że argument zaczyna się od /C w przeciwnym razie nie zadziała. Jak Scott Ferguson powiedział: "wykonuje polecenie określone przez ciąg znaków, a następnie kończy."

 744
Author: RameshVel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-24 13:07:39

Próbowałem @RameshVel solution, ale nie mogłem przekazać argumentów w mojej aplikacji konsolowej. Jeśli ktoś doświadcza tego samego problemu tutaj jest rozwiązanie:

using System.Diagnostics;

Process cmd = new Process();
cmd.StartInfo.FileName = "cmd.exe";
cmd.StartInfo.RedirectStandardInput = true;
cmd.StartInfo.RedirectStandardOutput = true;
cmd.StartInfo.CreateNoWindow = true;
cmd.StartInfo.UseShellExecute = false;
cmd.Start();

cmd.StandardInput.WriteLine("echo Oscar");
cmd.StandardInput.Flush();
cmd.StandardInput.Close();
cmd.WaitForExit();
Console.WriteLine(cmd.StandardOutput.ReadToEnd());
 77
Author: Ogglas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-30 17:22:43
var proc1 = new ProcessStartInfo();
string anyCommand; 
proc1.UseShellExecute = true;

proc1.WorkingDirectory = @"C:\Windows\System32";

proc1.FileName = @"C:\Windows\System32\cmd.exe";
proc1.Verb = "runas";
proc1.Arguments = "/c "+anyCommand;
proc1.WindowStyle = ProcessWindowStyle.Hidden;
Process.Start(proc1);
 28
Author: HackerMan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-18 19:22:26

Chociaż technicznie nie odpowiada to bezpośrednio na postawione pytanie, odpowiada na pytanie, Jak zrobić to, co chciał zrobić oryginalny plakat: połączyć pliki. Jeśli już, to jest to post, aby pomóc początkującym zrozumieć, o czym Hunter i Konstantin rozmawiają.

Jest to metoda, której używam do łączenia plików (w tym przypadku jpg i zip). Zauważ, że tworzę bufor, który zostanie wypełniony zawartością pliku zip (w małych kawałkach, a nie w jednej dużej operacji odczytu), następnie bufor jest zapisywany z tyłu pliku jpg, aż do osiągnięcia końca pliku zip:

private void CombineFiles(string jpgFileName, string zipFileName)
{
    using (Stream original = new FileStream(jpgFileName, FileMode.Append))
    {
        using (Stream extra = new FileStream(zipFileName, FileMode.Open, FileAccess.Read))
        {
            var buffer = new byte[32 * 1024];

            int blockSize;
            while ((blockSize = extra.Read(buffer, 0, buffer.Length)) > 0)
            {
                original.Write(buffer, 0, blockSize);
            }
        }
    }
}
 10
Author: CarllDev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-04 09:37:41

Tak ,jest (patrz link w komentarzu Matta Hamiltona), ale łatwiej i lepiej byłoby używać klas IO. NET. Możesz użyć pliku.ReadAllBytes, aby odczytać pliki, a następnie plik.WriteAllBytes do zapisu wersji "osadzonej".

 8
Author: Instance Hunter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-24 04:30:48

Żadna z powyższych odpowiedzi nie pomogła z jakiegoś powodu, wygląda na to, że zamiatają błędy pod dywan i utrudniają rozwiązywanie własnych poleceń. No i skończyło się na czymś takim, może to komuś pomoże:

var proc = new Process
{
    StartInfo = new ProcessStartInfo
    {
        FileName = @"C:\Program Files\Microsoft Visual Studio 14.0\Common7\IDE\tf.exe",
        Arguments = "checkout AndroidManifest.xml",
        UseShellExecute = false,
        RedirectStandardOutput = true,
        CreateNoWindow = true,
        WorkingDirectory = @"C:\MyAndroidApp\"
    }
};

proc.Start();
 6
Author: Matt Bonness,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-24 04:01:38

Tutaj jest trochę prosta i mniej kodowa wersja. Ukryje też okno konsoli -

System.Diagnostics.Process process = new System.Diagnostics.Process();
process.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
process.StartInfo.FileName = "cmd.exe";
process.StartInfo.Arguments = "/C copy /b Image1.jpg + Archive.rar Image2.jpg";
process.Start();
 5
Author: kamalpreet,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-02 06:03:13

Z odniesieniem do Microsoft.VisualBasic

Interaction.Shell("copy /b Image1.jpg + Archive.rar Image2.jpg", AppWinStyle.Hide);
 4
Author: Slai,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-25 01:26:32

Możesz to zrobić używając CliWrap w jednej linii:

var stdout = new Cli("cmd")
         .Execute("copy /b Image1.jpg + Archive.rar Image2.jpg")
         .StandardOutput;
 4
Author: Tyrrrz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-29 17:33:23

Możesz to osiągnąć za pomocą następującej metody (jak wspomniano w innych odpowiedziach):

strCmdText = "'/C some command";
Process.Start("CMD.exe", strCmdText);

Kiedy wypróbowałem metody wymienione powyżej, stwierdziłem, że moje polecenie niestandardowe nie działa przy użyciu składni niektórych z powyższych odpowiedzi.

Dowiedziałem się, że bardziej złożone polecenia muszą być zawarte w cudzysłowach, aby działały:

string strCmdText;
strCmdText = "'/C cd " + path + " && composer update && composer install -o'";
Process.Start("CMD.exe", strCmdText);
 1
Author: Peter verleg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-18 19:59:43