إعادة توجيه الإخراج من سطر أوامر Windows إلى ملف نصي

تعد إعادة توجيه الإخراج إلى ملف من أكثر الطرق المفيدة لتسجيل واستكشاف سلوك الأوامر أو المهام الدفعية التي تقوم بتشغيلها على Windows .

ومع ذلك ، هناك عدة طرق مختلفة يمكنك من خلالها إعادة توجيه عمليات الكتابة في سطر الأوامر إلى ملف. يعتمد الخيار الذي تختاره على الطريقة التي تريد بها عرض إخراج الأمر.

كيف يعمل إخراج موجه أوامر Windows(How Windows Command Prompt Output Works)

عند كتابة أمر في وحدة تحكم Windows ( موجه الأوامر(command prompt) ) ، ينتقل الإخراج من هذا الأمر إلى دفقين منفصلين.

  • STDOUT : Standard Out هو المكان الذي تذهب إليه أي استجابات قياسية من الأوامر. على سبيل المثال ، الاستجابة القياسية لأمر DIR هي قائمة بالملفات الموجودة داخل دليل.
  • STDERR : الخطأ القياسي(Standard Error) هو المكان الذي تنتقل إليه أي رسائل خطأ إذا كانت هناك مشكلة في الأمر. على سبيل المثال ، إذا لم يكن هناك أي ملفات في الدليل ، فسيقوم الأمر DIR بإخراج " (DIR)File Not Found" إلى تدفق Standard Error .

يمكنك إعادة توجيه الإخراج إلى ملف في Windows لكل من تدفقات الإخراج هذه.

إعادة توجيه كتابة الإخراج القياسي إلى ملف جديد(Redirect Standard Output Write to New File)

هناك طريقتان يمكنك من خلالهما إعادة توجيه الإخراج القياسي لأمر ما إلى ملف. الأول هو إرسال إخراج الأمر الكتابة إلى ملف جديد في كل مرة تقوم فيها بتشغيل الأمر.

للقيام بذلك ، افتح موجه الأوامر واكتب:

dir test.exe > myoutput.txt

يخبر الحرف> وحدة التحكم بإخراج STDOUT إلى الملف بالاسم الذي قدمته.

عند تشغيل هذا الأمر(run this command) ، ستلاحظ عدم وجود أي استجابة في نافذة الأوامر باستثناء الخطأ الذي يشير إلى عدم وجود الملف.

هذا بسبب إعادة توجيه الإخراج القياسي للأمر إلى ملف يسمى myoutput.txt. الملف موجود الآن في نفس الدليل حيث قمت بتشغيل الأمر. لا يزال ناتج الخطأ القياسي يظهر كما هو معتاد.

ملاحظة(Note) : كن حذرًا لتغيير الدليل النشط لموجه(change the active directory) الأوامر قبل تشغيل الأمر. بهذه الطريقة ستعرف مكان تخزين الملفات الناتجة.

يمكنك عرض الإخراج القياسي الذي انتقل إلى الملف عن طريق كتابة "myoutput.txt" في نافذة الأوامر. سيؤدي هذا إلى فتح الملف النصي في عارض الملفات النصية الافتراضي. بالنسبة لمعظم الأشخاص ، يكون هذا عادةً Notepad.exe .

في المرة التالية التي تقوم فيها بتشغيل نفس الأمر ، سيتم حذف ملف الإخراج السابق. سيتم إعادة إنشاء ملف إخراج جديد بآخر إخراج للأمر.

إعادة توجيه الإخراج القياسي(Standard Output) يكتب إلى نفس الملف(Same File)

ماذا لو كنت لا تريد الكتابة فوق نفس الملف؟ خيار آخر هو استخدام >> بدلاً من> لإعادة التوجيه إلى ملف الإخراج. في حالة هذا المثال ، ستكتب:

dir test.exe >> myoutput.txt

سترى نفس الإخراج (الخطأ فقط).

ولكن في هذه الحالة ، بدلاً من الكتابة فوق ملف الإخراج ، يقوم هذا الأمر بإلحاق الإخراج الجديد بملف الإخراج الحالي.

في كل مرة تقوم فيها بتشغيل أمر وإلحاق الإخراج بملف ، سيكتب الإخراج القياسي الجديد في نهاية الملف الحالي.

إعادة توجيه الخطأ القياسي إلى ملف(Redirect Standard Error To a File)

بنفس الطريقة التي يمكنك بها إعادة توجيه عمليات الكتابة القياسية إلى ملف ، يمكنك أيضًا إخراج تدفق الخطأ القياسي إلى ملف.

للقيام بذلك ، ستحتاج إلى إضافة 2> إلى نهاية الأمر ، متبوعًا بملف خطأ الإخراج الذي تريد إنشاءه.

في هذا المثال ، ستكتب الأمر: 

dir test.exe > myoutput.txt 2> output.err

يؤدي هذا إلى إرسال دفق الإخراج القياسي إلى myoutput.txt ، ودفق الخطأ القياسي إلى output.err. والنتيجة هي أنه لا يتم عرض أي دفق إخراج على الإطلاق في نافذة وحدة التحكم.

ومع ذلك ، يمكنك رؤية رسائل الخطأ عن طريق كتابة output.err . سيؤدي هذا إلى فتح الملف في عارض الملفات النصية الافتراضي الخاص بك.

كما ترى ، يتم إخراج أي رسائل خطأ من الأمر إلى ملف الخطأ. تمامًا(Just) كما هو الحال مع الإخراج القياسي ، يمكنك استخدام >> بدلاً من ذلك لإلحاق الخطأ بالأخطاء من الأوامر التي تم تشغيلها مسبقًا.

إعادة توجيه كافة عمليات الكتابة المخرجة إلى نفس الملف(Redirect All Output Writes to a Same File)

كل من الأساليب المذكورة أعلاه ينتج عنها ملفات متعددة. ملف واحد لتدفق الإخراج القياسي والآخر لتيار الخطأ القياسي.

إذا كنت تريد تضمين كل من هذه المخرجات في نفس الملف ، فيمكنك القيام بذلك أيضًا. للقيام بذلك ، تحتاج فقط إلى إعادة توجيه كل الإخراج إلى نفس الملف باستخدام الأمر التالي.

dir test.exe 1> myoutput.txt 2>&1

إليك كيفية عمل هذا الأمر:

  • يتم توجيه الإخراج القياسي إلى ملف الإخراج المحدد بواسطة رقم الإخراج 1.
  • يتم إعادة توجيه ناتج الخطأ القياسي المحدد بواسطة الرقم 2 إلى ملف الإخراج المحدد بالرقم 1.

سيؤدي هذا إلى إلحاق ناتج الخطأ بنهاية الإخراج القياسي.

هذه طريقة مفيدة لرؤية كل مخرجات أي أمر في ملف واحد. 

إسكات تدفقات الإخراج القياسية أو الخطأ(Silencing Standard or Error Output Streams)

يمكنك أيضًا إيقاف تشغيل إما Standard Output أو Standard Error بإعادة توجيه الإخراج إلى NUL بدلاً من ملف.

باستخدام المثال أعلاه ، إذا كنت تريد فقط الإخراج القياسي(Standard Output) وليس هناك خطأ قياسي(Standard Error) على الإطلاق ، يمكنك استخدام الأمر التالي:

dir test.exe 1> myoutput.txt 2>nul

سيؤدي هذا إلى نفس ملف الإخراج مثل المثال الأول أعلاه حيث قمت بإعادة توجيه الإخراج القياسي(Standard Output) فقط ، ولكن باستخدام هذا الأمر ، لن يتردد صدى الخطأ داخل وحدة التحكم. لن يقوم بإنشاء ملف سجل خطأ أيضًا.

هذا مفيد إذا كنت لا تهتم بأي أخطاء ولا تريد أن تصبح مصدر إزعاج.

يمكنك تنفيذ أي من أوامر الإخراج المذكورة أعلاه من داخل ملف BAT(inside a BAT file) وسوف ينتقل الإخراج من هذا السطر إلى ملف الإخراج الذي تحدده. هذه طريقة مفيدة لمعرفة ما إذا كانت أي أوامر داخل ملف BAT بها أي أخطاء عند محاولة التشغيل.



About the author

أنا مبرمج كمبيوتر منذ أكثر من 15 عامًا. تكمن مهاراتي في تطوير التطبيقات البرمجية وصيانتها ، فضلاً عن تقديم الدعم الفني لتلك التطبيقات. لقد قمت أيضًا بتدريس برمجة الكمبيوتر لطلاب المدارس الثانوية ، وأنا حاليًا مدرس محترف.



Related posts