الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيفية تمرير أمر دوس عن طريق برنامج C#

بدأه Dr.programmer في 10 سبتمبر 2008 · 8 رد · 2,036 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

أخواني الكرام أنا بحثت مطولا في موضوع تمرير أوامر للكوماند لاين عن طريق برنامج C#.

مثال :

مثلا عندما أفتح الـ CMD.exe أو الكوماند لاين واضع الأمر ( COPY C:\text.txt D:\text.text ) فانه يتم نسخ الملف text.txt إلى القرص الصلب D

الآن أريد تنفيذ العملية وادراج الأمر عن طريق برنامج C#.

بعد البحث وجدت أن بإمكاني الاستعانة بالله ثم بالصنف المسمى process.

ولكن حاولت مرارا وتكرارا تنفيذ الأمر فلم أجد الا عدم النجاح المتتالي.

المشكلة بالتحديد هي عدم فهمي لوظائف الميثودز في هذا الصنف . فلا أدري أيها يمرر الأمر وايها يحدد المسار وأيها يستدعي الكوماند لاين !

أرجو ممن يستطيع المساعدة أن يدلو بدلوه علّي أجد لديه ما يفيد .

تقبلوا تحياتي وفائق احترامي .

#2

لا اعرف لم الحاجة لتنفيذ امر للدوز داخل لغة برمجة

يمكن عمل اي شي داخل اللغة و الاداء افضل و اسرع

مثلا نفس الكود الي كتبت يمكن تنفيذه كالاتي

System.IO.File.Copy(@"C:\Text.txt", @"D:\Text.Text")

وان كنت بحاجة الى تنفيذ امر فالامر سهل

كل ما عليك هو استعداء الميثود Start للكلاس Process

و ارسال القيمة cmd حتى يتم استعاء الدوز ثم مرر الامر التي تود دتنفيذه

مثال

System.Diagnostics.Process.Start("cmd", @"/c copy c:\Text.txt d:\text.txt");

و للسهولة يمكنك عمل ملف من نوع cmd

مثال

Process myProcess = new Process();
myProcess.StartInfo.FileName = "MyFile.cmd";
myProcess.Start();

لا تنسى وضع

using System.Diagnostics
#3

الحل أبسط مما تتخيل بإذن الله

أولا من كلامك فإنك سوف تعمل على تطبيق كونسول

إذن أولا لإمرار أى شئ للبرنامج قبل تشغيله سوف تستخدم مصفوفة الARGS الموجودة فى الMain و التى هى من نوع string

هذه المصفوفة <parameter> للدالة Main تعمل من أجل هذا الغرض ألا و هو إمرار Params من نوع string للدالة الرئيسية عن طريق سطر أوامر الدوس

هذا أولا

ثانيا بعد ما تتعرف الدالة الرئيسية على ذلك الدخل يتم التعامل معه على أنه مصفوفة عادية من نوع string فتبدأ بأى أسلوب بالتقسيمه كما تشاء و عمل ما تريد عليه

يعنى مثلا

ملف التشغيل الخاص بك إسمه copy

من محث التشغيل من الممكن أن تكتب

COPY C:\1.TXT D:\1.TXT

لاحظ أننى قمت بفصل كل مقطع بمسافة

تأتى على المقطع الثانى و يكون هذا هو الsource و المقطع الثانى يكون ال destination

و بالنسبة لموضوع نسخ ملف من مكان الى مكان أو تحريكه أو حتى مسحه كل ذلك تستطيع أن تفعله بكل سهول عن طريق الIO NAME SPACE

تمنى أن يكون هذا هو الى قصدته

لا إله إلا الله محمد رسول الله

アッラー以外に神はなし。ムハンマドはアッラーの使徒である

#4

الاخ " slayer666 " أسعدني مرورك واسعدتني اجابتك أكثر .

لا عدمناك أخي الغالي. تقبل تحياتي.

_________________

الأخ " نور " .

لم أفهم من ردك إلا القليل فلم أجد ترابط واضح بين سطورك !

تقبل تحياتي وفائق احترامي.

#5

هل تظهر رسالة النسخ (المستطيل الذي يوضح الوقت المتبقي من عملية النسخ) عندما استخدم طريقتك اخي سلاير666 ؟ كيف اقوم باخفائها (انسخ ملفات بدون ان يعلم المستخدم شيء)

#6
مجلـد جديـد كتب:
هل تظهر رسالة النسخ (المستطيل الذي يوضح الوقت المتبقي من عملية النسخ) عندما استخدم طريقتك اخي سلاير666 ؟ كيف اقوم باخفائها (انسخ ملفات بدون ان يعلم المستخدم شيء)

اذا قمت بالنسخ من داخل السي شارب فلن يظهر اي شي :wink:

System.IO.File.Copy(@"C:\Text.txt", @"D:\Text.Text")

ولكن عند تنفيذ امر الدوز سوف تظهر الشاشة السوداء :(

#7

أهلا وسهلا بك أخي " مجلد جديد "

يمكنك اخفاء شاشة الدوس وذلك بتمرير الأمر التالي :

psi.WindowStyle = ProcessWindowStyle.Hidden;

حيث أن الــ( psi ) هو اوبجكت من ProcessStartInfo

تقبل تحياتي.

تم تعديل هذه المشاركة بواسطة Dr.programmer في 13 سبتمبر 2008 في 20:53

#8

using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication2
{
class Program
{
static void Main ( string[] args )
{
if ( args.Length > 0 )
{
if ( args[0] == "1" )
{
Console.Write ( "\n\t\tthis is option one\n" );
}
else if ( args[0] == "2" )
{
Console.Write ( "\n\t\tthis is option two\n" );
}
else if ( args[0] == "3" )
{
Console.Write ( "\n\t\tthis is option three\n" );
}
}


}
}
}
using System;

بعد ما تعمل كمبايل لهذا الكود قم بتشغيل الملف الناتج من الدوس الخاص بالويندوز كالأتى

c:\filename.exe 1

c:\filename.exe 2

c:\filename.exe 3

لا إله إلا الله محمد رسول الله

アッラー以外に神はなし。ムハンマドはアッラーの使徒である

#9

هذا طلبك بالضبط على ما أظن

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;

namespace ConsoleApplication2
{
	class Program
	{
		static void Main ( string[] args )
		{
			if ( args.Length > 0 )
			{
				File.Copy ( args[0].ToString (), args[1].ToString());
			}
			if ( File.Exists(args[1].ToString() ))
			{
				Console.WriteLine("Copy Accomplished");
			}
		}
	}
}

قم ببناء المشروع ثم بعد ذلك شغل الملف التنفيذى من سطر الاوامر من الدوس

و قم بكتاية الأتى

c:\fileName.exe path1 path2

مثال على ذلك

c:\fileName.exe c:\1.txt d:\1.txt

لا إله إلا الله محمد رسول الله

アッラー以外に神はなし。ムハンマドはアッラーの使徒である

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…