কমান্ড প্রম্পট কমান্ডগুলি রান করুন


604

সি # অ্যাপলিকেশন থেকে কমান্ড প্রম্পট কমান্ড চালানোর কোনও উপায় আছে কি? যদি তা হয় তবে আমি নিম্নলিখিতগুলি কীভাবে করব:

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

এটি মূলত JPG চিত্রের মধ্যে একটি আরআর ফাইল এম্বেড করে। আমি কেবল ভাবছিলাম যে সি # এ স্বয়ংক্রিয়ভাবে এটি করার কোনও উপায় আছে কিনা।


6
স্ট্যাকওভারফ্লো / সেকশন / 181719 /… এর সদৃশ (সেখানে একটি উত্তর রয়েছে যা আপনি যা চান তা করেন)।
ম্যাট হ্যামিল্টন

stackoverflow.com/a/5367686/492 এর আরও ভাল উত্তর আছে
সিএডি ব্লোক

উত্তর:


916

এটি আপনাকে সি # থেকে শেল কমান্ডগুলি চালাতে হবে all

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

সম্পাদনা করুন:

এটি সিএমডি উইন্ডোটি লুকানো hide

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অন্যথায় এটি কাজ করবে না। স্কট ফার্গুসন কীভাবে বলেছেন: এটি "স্ট্রিং দ্বারা নির্দিষ্ট কমান্ড বহন করে এবং সমাপ্ত হয়।"


166
/ সি স্ট্রিং দ্বারা নির্দিষ্ট কমান্ড বহন করে এবং তারপরে সমাপ্ত হয়
স্কট ফার্গুসন

16
এটি কেবল
সেন্টিমিকে

3
ধন্যবাদ, আরও একটি প্রশ্ন। এই সময়ে কমান্ড প্রম্পটটি লুকানোর কোনও উপায় আছে?
ব্যবহারকারী

9
আমি দেখতে পাচ্ছি না আমি কীভাবে একমাত্র এই ভাবনাটিকে ভয়ঙ্কর ধারণা বলে মনে করি। হ্যাঁ, এটি কাজ করবে তবে এটি সম্পূর্ণ এবং সম্পূর্ণ ভুল। সাধারণ আইও অপারেশনগুলি করতে সিএমডি প্রসেসগুলি ফাঁস করা ভুল, যদিও এটি কাজ করে। System.IO নেমস্পেসে ডকুমেন্টেশনের মাধ্যমে পড়ুন। অপ্রয়োজনীয় প্রক্রিয়াগুলি ছাড়াই আপনার যা করা দরকার তা করার জন্য সেখানে যথেষ্ট কার্যকারিতা রয়েছে।
ইনস্ট্যান্স হান্টার

56
এফওয়াইআই: প্রক্রিয়াটি চালিয়ে যাওয়ার আগে এবং প্রক্রিয়াটি শেষ হওয়ার আগে অপেক্ষা করার জন্য প্রসেসটি ব্যবহার করুন Wউইটফরএক্সিট ()।
shindigo

122

@ রামেশভেল সমাধানের চেষ্টা করেছি কিন্তু আমি আমার কনসোল অ্যাপ্লিকেশনটিতে তর্ক করতে পারিনি। এখানে যদি কেউ একই সমস্যা অনুভব করে তবে তার সমাধান এটি:

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

2
আমি আমার মেশিনে কিছু অ্যাডমিন বা অ্যান্টি ভাইরাস বিধিনিষেধ আছে বলে ভেবে কোনও সুযোগ দিলাম না .. উপরের কোডটি কার্যকর! ধন্যবাদ ওগ্লাস
পিট কোজাক

6
এই লাইন: cmd.StartInfo.CreateNoWindow = সত্য; আমার দিন বাঁচিয়েছে।
গণেশ কামথ - 'কোড উন্মত্ত'

একক একাধিক কমান্ড কার্যকর করার কোনও উপায় আছেcmd.StandardInput.WriteLine(@"cd C:\Test; pwd")
জ্যাচ স্মিথ

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

2
@সি # তে সাইন কি ?
পেসারিয়ার

6
@ পেসারিয়ার এটি সংকলকটিকে সমস্ত অক্ষরগুলি পালাতে বলে যা সাধারণত এই ক্ষেত্রে স্ট্রিংয়ে পালাতে হয় \ \ সুতরাং, \ ব্যতীত আপনার কোডটি দেখতে হবেproc1.FileName = "C:\\Windows\\System32\\cmd.exe";
জেমস কো

1
একটি লক্ষ্য করা উচিত যে proc1.Verb = "runas";এই প্রক্রিয়াটি উন্নত সুবিধাগুলি দিয়ে চালিত করে ... এটি সর্বদা উদ্দেশ্যযুক্ত নয়।
দিনেই

1
আমি কীভাবে এই সেন্টিমিডি উইন্ডোটি শেষ না হয়ে বন্ধ করতে পারি?
হ্রভোজে টি

1
আমি দেখতে পেয়েছি যে লাইনের অন্যান্য কমান্ডের সাথে '&&' এর সাথে যুক্ত 'সিডি পাথ' কল করা সর্বদা শেষ হয়ে যায় এমনকি যদি এটি আগে যায়। আপনার: 'proc1.WorkingDirectory = @ "সি: \ উইন্ডোজ \ সিস্টেম 32";' খুব সহায়ক ছিল! ধন্যবাদ!
নোজিম তুরাকুলভ

11

উপরের উত্তরগুলির কোনওটিই কোনও কারণে সহায়তা করেনি, দেখে মনে হয় যে তারা গালিচা নীচে ত্রুটিগুলি সরিয়ে নিয়ে যায় এবং কারও আদেশকে সমস্যা সমাধানে অসুবিধা সৃষ্টি করে। সুতরাং আমি এই জাতীয় কিছু নিয়েই শেষ করেছি, সম্ভবত এটি অন্য কাউকে সহায়তা করবে:

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

যদি আমি এটি একটি স্ট্যান্ড-একা কনসোল অ্যাপ্লিকেশনটিতে সংকলন করতে চাই, তবে এটির কাজটি করার জন্য অন্য কোন কোড যুক্ত করতে হবে? (আমি এই সমস্ত প্রোগ্রামিং স্টাফের নুব, কেবল কিছু স্ক্রিপ্টিং করেছি)। আমি csc.exe বিটিডব্লু ব্যবহার করছি।
স্ক্রিপ্ট'অনকোড

@ কপিরাইটাইট একটি নেমস্পেস এবং ক্লাস। আপনি যদি কেবল একটি নতুন প্রকল্প তৈরি করেন তবে সেগুলি আপনার জন্য উত্পন্ন করা হবে।
কইনবার্ড

আহ। কিছু মনে করো না. আপনি যদি cmd.exeঅ্যাপটি ব্যবহার করেন তবে আপনি আর্গুমেন্ট হিসাবে আদেশগুলি পাস করতে পারেন।
জাচ স্মিথ

উত্তরোত্তর জন্য: আমি চাইছিলাম যে প্রক্রিয়াটি চালানো echo Hello World!এবং সেমিড উইন্ডোতে পপ আপ হওয়া কমান্ড আউটপুটটি প্রদর্শিত হোক। তাই আমি চেষ্টা: Filename = @"echo", Arguments = "Hello World!", UseShellExecute = false, RedirectStandardOuput = false, CreateNoWindow = false। এটি "হ্যালো ওয়ার্ল্ড!" প্রদর্শনের জন্য প্যারেন্ট অ্যাপ্লিকেশনটির সিএমডি উইন্ডোটিকে মঞ্জুরি দিয়েছে! (যার অর্থ দাঁড়ায় কারণ স্টাডাউট শিশু প্রক্রিয়াতে পুনর্নির্দেশ করা হয়নি)।
মিনহান ত্রান

10

যদিও প্রযুক্তিগতভাবে এটি সরাসরি উত্থাপিত প্রশ্নের উত্তর দেয় না, মূল পোস্টারটি কী করতে চেয়েছিল তা কীভাবে করা যায় তার প্রশ্নের উত্তর দেয়: ফাইলগুলি একত্রিত করুন। যদি কিছু হয় তবে ইন্সটেন্স হান্টার এবং কনস্ট্যান্টিন কী সম্পর্কে কথা বলছেন তা নতুনদের বুঝতে সহায়তা করার জন্য এটি একটি পোস্ট।

আমি ফাইলগুলি একত্রিত করতে এই পদ্ধতিটি ব্যবহার করি (এক্ষেত্রে একটি জেপিজি এবং একটি জিপ)। নোট করুন যে আমি একটি বাফার তৈরি করেছি যা জিপ ফাইলের সামগ্রীতে ভরাট হয়ে যায় (একটি বড় রিড অপারেশনের পরিবর্তে ছোট খণ্ডে), এবং তারপরে জিফ ফাইলের শেষ না হওয়া পর্যন্ত বাফারটি 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);
            }
        }
    }
}

9

আপনি যদি সিএমডি উইন্ডোটি উন্মুক্ত রাখতে চান বা উইনফর্ম / ডাব্লুপিএফ ব্যবহার করতে চান তবে এটি এটির মতো ব্যবহার করুন

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

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

/ কে

সিএমডি উইন্ডোটি উন্মুক্ত রাখবে


খুশী হলাম। কমান্ড এবং এর পরামিতিগুলির জন্য এই ডকুমেন্টেশনটি খুঁজে cmdপেয়েছে।
পাইস

8

হ্যাঁ, ম্যাট হ্যামিল্টনের মন্তব্যে লিঙ্কটি দেখুন) তবে নেট। এর আইও ক্লাস ব্যবহার করা আরও সহজ এবং ভাল হবে। আপনি ফাইলগুলি পড়ার জন্য ফাইল.আরেডআলবাইটস এবং তারপরে "এম্বেডড" সংস্করণটি লেখার জন্য ফাইল.ওরাইটআলবাইট ব্যবহার করতে পারেন।


11
একে অপরের সাথে যুক্ত করতে পুরো ফাইলগুলিকে মেমোরিতে লোড করা খুব দক্ষ নয়, বিশেষত ফাইলগুলি যথেষ্ট বড় হলে big
কনস্ট্যান্টিন স্পিরিন

7
উত্তরের চেতনা দেখার চেষ্টা করুন। মুল বক্তব্যটি হ'ল .NET এর ওএস শেলটিতে কল না করে এগুলি করার জন্য পর্যাপ্ত আইও ক্লাস এবং ফাংশন রয়েছে। আমি উল্লিখিত বিশেষ ফাংশনগুলি সেরা নাও হতে পারে তবে সেগুলি কেবল সহজতম। এটি করার জন্য শেলটিতে কল করা মোটেই কোনও মানে করে না।
ইনস্ট্যান্স হান্টার

7

আপনি এক লাইনে ক্লাইবার্যাপ ব্যবহার করে এটি করতে পারেন :

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

আমি এটি উত্সাহিত করেছি ... কিন্তু রেপোটি এখন অনুপস্থিত বলে মনে হচ্ছে:Unable to find package 'CliWrap' at source
জ্যাচ স্মিথ

1
@ জ্যাচস্মিথ আপনার অর্থ কী তা নিশ্চিত নয়, nuget.org/packages/CliWrap ভাল কাজ করছে বলে মনে হচ্ছে। মূল লিঙ্কটিও।
Tyrrrz

আহঃ সরি .. কোনও কারণে যখন আমি ভিপিএন-এর মাধ্যমে আমার নুগেট রেপোতে সংযোগ দিতে পারিনি তখন আমি এই প্যাকেজটি ইনস্টল করতে পারিনি। নাগেট এখনও আমার কাছে বেশিরভাগ রহস্য is নিশ্চয়ই এটি ভুল সেট আপ করেছে
জ্যাচ স্মিথ


5

এখানে সামান্য সহজ এবং কম কোড সংস্করণ। এটি কনসোল উইন্ডোটিও লুকিয়ে রাখবে-

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

আপনি যদি async মোডে কমান্ডটি চালাতে চান - এবং ফলাফলগুলি মুদ্রণ করুন। আপনি এই ক্লাস করতে পারেন:

    public static class ExecuteCmd
{
    /// <summary>
    /// Executes a shell command synchronously.
    /// </summary>
    /// <param name="command">string command</param>
    /// <returns>string, as output of the command.</returns>
    public static void ExecuteCommandSync(object command)
    {
        try
        {
            // create the ProcessStartInfo using "cmd" as the program to be run, and "/c " as the parameters.
            // Incidentally, /c tells cmd that we want it to execute the command that follows, and then exit.
            System.Diagnostics.ProcessStartInfo procStartInfo = new System.Diagnostics.ProcessStartInfo("cmd", "/c " + command);
            // The following commands are needed to redirect the standard output. 
            //This means that it will be redirected to the Process.StandardOutput StreamReader.
            procStartInfo.RedirectStandardOutput =  true;
            procStartInfo.UseShellExecute = false;
            // Do not create the black window.
            procStartInfo.CreateNoWindow = true;
            // Now we create a process, assign its ProcessStartInfo and start it
            System.Diagnostics.Process proc = new System.Diagnostics.Process();
            proc.StartInfo = procStartInfo;
            proc.Start();

            // Get the output into a string
            string result = proc.StandardOutput.ReadToEnd();

            // Display the command output.
            Console.WriteLine(result);
        }
        catch (Exception objException)
        {
            // Log the exception
            Console.WriteLine("ExecuteCommandSync failed" + objException.Message);
        }
    }

    /// <summary>
    /// Execute the command Asynchronously.
    /// </summary>
    /// <param name="command">string command.</param>
    public static void ExecuteCommandAsync(string command)
    {
        try
        {
            //Asynchronously start the Thread to process the Execute command request.
            Thread objThread = new Thread(new ParameterizedThreadStart(ExecuteCommandSync));
            //Make the thread as background thread.
            objThread.IsBackground = true;
            //Set the Priority of the thread.
            objThread.Priority = ThreadPriority.AboveNormal;
            //Start the thread.
            objThread.Start(command);
        }
        catch (ThreadStartException )
        {
            // Log the exception
        }
        catch (ThreadAbortException )
        {
            // Log the exception
        }
        catch (Exception )
        {
            // Log the exception
        }
    }

}

2

আপনি নিম্নলিখিত পদ্ধতিটি ব্যবহার করে এটি অর্জন করতে পারেন (অন্যান্য উত্তরে উল্লিখিত):

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

1

আপনি কেবল কোনও .batফর্ম্যাট এক্সটেনশনে কোডটি ব্যাচ ফাইলের কোডটি ব্যবহার করতে পারেন :

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

এই সি # কোডটি ব্যবহার করুন:

Process.Start("file_name.bat")


আপনি যদি চালনার সময় .vbsCreateObject("Wscript.Shell").Run "filename.bat",0,True
সেন্টিমিডিটি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.