خروجی را از خط فرمان ویندوز به یک فایل متنی هدایت کنید

یکی از مفیدترین راه‌ها برای ثبت و عیب‌یابی رفتار دستورات یا کارهای دسته‌ای که در ویندوز(Windows) اجرا می‌کنید ، تغییر مسیر خروجی به یک فایل است.

با این حال، چند راه مختلف وجود دارد که می توانید نوشته های خط فرمان را به یک فایل هدایت کنید. گزینه ای که انتخاب می کنید بستگی به نحوه مشاهده خروجی فرمان خود دارد.

نحوه عملکرد خروجی خط فرمان ویندوز(How Windows Command Prompt Output Works)

هنگامی که فرمانی را در کنسول ویندوز تایپ می کنید ( (Windows)خط فرمان(command prompt) )، خروجی آن دستور به دو جریان جداگانه می رود.

  • STDOUT : خروجی(Out) استاندارد جایی است که هر پاسخ استاندارد از دستورات به آن می‌رسد. برای مثال، پاسخ استاندارد برای دستور DIR ، فهرستی از فایل‌های داخل یک فهرست است.
  • STDERR : خطای استاندارد(Standard Error) جایی است که هر پیام خطایی در صورت بروز مشکل در دستور ارسال می شود. به عنوان مثال، اگر هیچ فایلی در دایرکتوری وجود نداشته باشد، دستور 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 مشاهده(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