문제

C# 응용 프로그램 내에서 명령 프롬프트 명령을 실행하는 방법이 있습니까? 그렇다면 다음은 어떻게해야합니까?

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

이것은 기본적으로 JPG 이미지에 RAR 파일을 포함시킵니다. C#에서 자동 으로이 작업을 수행 할 방법이 있는지 궁금합니다.

도움이 되었습니까?

해결책

C#에서 쉘 명령을 실행 해야하는 전부입니다.

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

편집하다:

이것은 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();

편집 : 2

중요한 것은 논쟁이 시작된다는 것입니다 /C 그렇지 않으면 작동하지 않습니다. 어떻게 스콧 퍼거슨 SAY : "문자열에 의해 지정된 명령을 수행 한 다음 종료합니다."

다른 팁

@Rameshvel 솔루션을 시도했지만 콘솔 응용 프로그램에서 인수를 전달할 수 없었습니다. 누군가가 동일한 문제를 경험한다면 여기서 해결책이 있습니다.

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

기술적으로 이것은 직접적인 질문에 대답하지는 않지만 원래 포스터가 원하는 것을 수행하는 방법에 대한 질문에 대답합니다. 파일을 결합하십시오. 무엇이든, 이것은 초보자가 헌터와 콘 스탄 틴이 어떤 인스턴스에 대해 이야기하고 있는지 이해하는 데 도움이되는 게시물입니다.

이것은 파일을 결합하는 데 사용하는 방법입니다 (이 경우 JPG 및 Zip). ZIP 파일의 내용으로 채워진 버퍼를 만듭니다 (하나의 큰 읽기 작업이 아닌 작은 청크로). 그런 다음 버퍼가 ZIP 파일의 끝이있을 때까지 JPG 파일의 뒷면에 기록됩니다. 도달했다:

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

예, Matt Hamilton의 의견에는 링크 참조). 그러나 .NET의 IO 클래스를 사용하는 것이 더 쉽고 나을 것입니다. file.readalBytes를 사용하여 파일을 읽은 다음 file.writeallbytes를 읽고 "내장 된"버전을 작성할 수 있습니다.

위의 답변 중 어느 것도 어떤 이유로 든 도움이되지 않았으며, 깔개 아래에서 오류를 쓸어 내고 자신의 명령을 어렵게 만드는 것처럼 보입니다. 그래서 나는 이와 같은 무언가로 가게되었을 것입니다. 어쩌면 그것은 다른 사람을 도울 것입니다.

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

당신은 이것을 사용하여 할 수 있습니다 Cliwrap 한 줄로 :

var stdout = new Cli("cmd")
         .Execute("copy /b Image1.jpg + Archive.rar Image2.jpg")
         .StandardOutput;

다음은 간단하고 코드 버전이 적습니다. 콘솔 창을 숨길 것입니다.

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

에 대한 참조로 Microsoft.VisualBasic

Interaction.Shell("copy /b Image1.jpg + Archive.rar Image2.jpg", AppWinStyle.Hide);

CMD 창을 열어두고 싶거나 WinForm/WPF에서 사용하려면 이렇게 사용하십시오.

    string strCmdText;
//For Testing
    strCmdText= "/K ipconfig";

 System.Diagnostics.Process.Start("CMD.exe",strCmdText);

/케이

CMD 창을 열어 두십시오

다음 방법을 사용하여이를 달성 할 수 있습니다 (다른 답변에 언급).

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

위에 나열된 메소드를 시도했을 때 위의 일부 답변의 구문을 사용하여 사용자 정의 명령이 작동하지 않는다는 것을 알았습니다.

더 복잡한 명령을 인용문으로 캡슐화해야한다는 것을 알았습니다.

string strCmdText;
strCmdText = "'/C cd " + path + " && composer update && composer install -o'";
Process.Start("CMD.exe", strCmdText);

단순히 코드를 a로 작성할 수 있습니다 .bat 형식 확장자, 배치 파일의 코드 :

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

이 C# 코드를 사용하십시오.

Process.Start("file_name.bat")

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top