উইন্ডোজ সেমিডি স্টাডাউট এবং স্টেডার একক ফাইলে পুনর্নির্দেশ করুন


688

আমি ডস কমান্ডের সমস্ত আউটপুট (stdout + stderr) একক ফাইলে পুনর্নির্দেশের চেষ্টা করছি :

C:\>dir 1> a.txt 2> a.txt
The process cannot access the file because it is being used by another process.

এটি কি সম্ভব, বা আমার কেবল দুটি পৃথক ফাইলে পুনর্নির্দেশ করা উচিত?


14
টেকনেট: কমান্ড পুনঃনির্দেশ অপারেটরগুলি ব্যবহার করে ( এগুলির উত্তরগুলির তুলনায় এটির উত্তর আরও ভাল)।
মার্টিন প্রিক্রিল

1
2> & 1 এটি একই ফাইল খুলে পারবেন না
লুক

উত্তর:


1090

তুমি চাও:

dir > a.txt 2>&1

সিনট্যাক্সটি (স্ট্ডার) 2>&1পুনর্নির্দেশ করবে (স্টাডআউট)। এছাড়াও আপনি পুনঃনির্দেশিত দ্বারা বার্তা লুকিয়ে রাখতে পারেন , আরো ব্যাখ্যা এবং MSDN উপর উদাহরণ21NUL


32
এই জন্য ধন্যবাদ, জানতেন না যে এই ইউনিক্স শেল সিনট্যাক্সটি ডসের জন্যও কাজ করে!
চ্যানড্রাইভার

20
এটি সমস্ত আউটপুট আড়াল করার জন্য দুর্দান্ত .. net stop w3svc >NUL 2>&1.. ধন্যবাদ!
wasatchwizard

3
@ ওয়াসাচউইজার্ড ইথিংক আমার এ নিয়ে সমস্যা হয়েছিল তবে>
নুল

13
যদি কোনও হ্যান্ডেল থাকে তবে হ্যান্ডেল (অর্থাত্ 2) এবং পুনঃনির্দেশ অপারেটর (অর্থাত>) এর মধ্যে কোনও স্থান থাকতে পারে না। অতএব 2> 2.txt(অথবা কাজ করে 2> &1) 2 > 2.txtনা; 2 > &1না.
লাল মটর 21

9
আমি খুব তাই ভালবাসি। "উঘ, এই সামান্য ওয়ান-অফ সমস্যাটি এক ঘন্টার মতো সময় নিতে চলেছে"। এই উত্তরটি খুঁজে পাওয়ার চেয়ে এই মন্তব্যটি লিখতে আমার বেশি সময় লেগেছে।
ব্র্যান্ডন

195

অ্যান্ডারস লিন্ডাহালের উত্তর সঠিক, তবে এটি লক্ষ করা উচিত যে আপনি যদি স্টডআউট কোনও ফাইলের দিকে পুনঃনির্দেশ করছেন এবং পাশাপাশি স্টাডারকে পুনঃনির্দেশ করতে চান তবে আপনাকে অবশ্যই এটি পুনঃনির্দেশের পরে2>&1 নির্দিষ্ট করে দেওয়া উচিত , অন্যথায় এটি কাজ করবে না।1>

REM *** WARNING: THIS WILL NOT REDIRECT STDERR TO STDOUT ****
dir 2>&1 > a.txt

10
এরপরে, ডেলবয়জে কী সমস্যা হয়েছে তা নির্ধারণ করতে আমার কত ঘন্টা ব্যয় করেছে! ধন্যবাদ!
নাম জি ভিইউ

4
এটি কোথাও ব্যাখ্যা করা হয়েছে কেন 1> এর আগে 2> & 1 স্থাপন করা উদ্দেশ্যপ্রাপ্ত প্রভাব অর্জন করবে না? আমি দৃ strongly়ভাবে সন্দেহ করি যে এটি "সেন্টিমিডি" কমান্ডগুলি যেভাবে আপনি পুনর্নির্দেশটি নির্দিষ্ট করেছেন তার উপর নির্ভর করে দুটি পৃথক অর্থ দেয় পার্স করার কমান্ডটি করতে পেরেছিল। তবে শব্দার্থবিজ্ঞানের নিয়মগুলি কোথাও নথিভুক্ত করা হয়েছে কারণ আমি মনে করি এটি সময় নষ্ট করতে পারে বলে এটি শেখার পক্ষে উপযুক্ত।
igbgotiz

12
@igbgotiz 2> & 1 এর অর্থ 'স্ট্রিম 1 এ স্ট্রিম 2 পুনর্নির্দেশ করুন'। সুতরাং আপনার প্রথমে 1 টি স্ট্রিম সেটআপ করা দরকার
ফ্রিঙ্ক দ্য ব্রাভ

3
@ ফ্রাঙ্ক দ্য ব্রাভ কিন্তু স্ট্রিম 1 হ'ল স্ট্যান্ডার্ড আউটপুট (যেমন কনসোল) যদি স্পষ্টভাবে নির্দিষ্ট না করা হয়। এটি এখনও এটি ইমো ব্যাখ্যা করে না।
মারিওডিএস

1
@ এমডিএসপেইপমিস্টার, আপনি যদি করেন তবে আপনি dir 2>&1 > a.txtপ্রথমে ( >) স্ট্রিম 2 (স্টাডার) 1 টি স্ট্রাউডে পুনর্নির্দেশ করছেন । তারপরে, উভয় ইতিমধ্যে একসাথে যোগদানের পরে, আপনি stdout ( >কোনও নির্দিষ্টকরণ ছাড়াই) ফাইলে পুনর্নির্দেশ করছেন । আপনি যদি স্টাডারকে অন্য কোথাও যেতে চান তবে আপনি প্রথমে স্টাডআউট দিয়ে যোগ দিতে পারবেন না।
cp.engr

80

এমএসকেবি থেকে পটভূমির তথ্য

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

এমএস সাপোর্ট কেবি 110930 থেকে নেওয়া ।


এমএসকেবি 110930 থেকে

কমান্ড প্রম্পট থেকে ত্রুটি বার্তাগুলি পুনর্নির্দেশ: STDERR / STDOUT

সারসংক্ষেপ

'>' চিহ্ন ব্যবহার করে কোনও অ্যাপ্লিকেশন থেকে আউটপুট পুনর্নির্দেশের সময়, ত্রুটি বার্তাগুলি এখনও স্ক্রিনে মুদ্রণ করে। এর কারণ ত্রুটি বার্তাগুলি প্রায়শই স্ট্যান্ডার্ড আউট স্ট্রিমের পরিবর্তে স্ট্যান্ডার্ড ত্রুটি প্রবাহে প্রেরণ করা হয়।

কোনও কনসোল (কমান্ড প্রম্পট) অ্যাপ্লিকেশন বা কমান্ডের আউটপুট প্রায়শই দুটি পৃথক স্ট্রিমে প্রেরণ করা হয়। নিয়মিত আউটপুট স্ট্যান্ডার্ড আউট (STDOUT) এ প্রেরণ করা হয় এবং ত্রুটি বার্তাগুলি স্ট্যান্ডার্ড ত্রুটি (STDERR) এ প্রেরণ করা হয়। আপনি যখন ">" চিহ্ন ব্যবহার করে কনসোল আউটপুট পুনর্নির্দেশ করবেন, আপনি কেবল STDOUT পুনর্নির্দেশ করছেন। STDERR পুনর্নির্দেশের জন্য আপনাকে পুনর্নির্দেশ প্রতীকটির জন্য '2>' নির্দিষ্ট করতে হবে। এটি দ্বিতীয় আউটপুট স্ট্রিমটি নির্বাচন করে যা STDERR।

উদাহরণ

কমান্ড dir file.xxx(যেখানে file.xxxঅস্তিত্ব নেই) নিম্নলিখিত আউটপুট প্রদর্শন করবে:

Volume in drive F is Candy Cane Volume Serial Number is 34EC-0876

File Not Found

আপনি যদি NULডিভাইসটি ব্যবহার করে আউটপুট পুনর্নির্দেশ করেন তবে আপনি dir file.xxx > nulএখনও আউটপুটটির ত্রুটি বার্তা অংশ দেখতে পাবেন:

File Not Found

এতে ত্রুটি বার্তাটি পুনঃনির্দেশ করতে (কেবল) NULনিম্নলিখিত কমান্ডটি ব্যবহার করুন:

dir file.xxx 2> nul

অথবা, আপনি আউটপুটটিকে এক জায়গায় এবং অন্যদিকে ত্রুটিগুলি পুনর্নির্দেশ করতে পারেন।

dir file.xxx > output.msg 2> output.err

আপনি STDERR এর আউটপুটটিকে STDOUT এ পুনঃনির্দেশ করতে এবং তারপরে STDOUT থেকে কোনও ফাইলে প্রেরণ করে "এবং 1" কমান্ডটি ব্যবহার করে ত্রুটিগুলি এবং স্ট্যান্ডার্ড আউটপুটটিকে একটি ফাইলে মুদ্রণ করতে পারেন:

dir file.xxx 1> output.msg 2>&1


13

সঠিক, প্রক্রিয়াটির জন্য ফাইল হ্যান্ডেল 1 হল STDOUT, দ্বারা 1>বা দ্বারা পুনঃনির্দেশিত >(1 বাদ দেওয়া যেতে পারে, কনভেনশন দ্বারা, কমান্ড ইন্টারপ্রেটার [সেমিডি.এক্সেই] এটি পরিচালনা করতে জানে) ") ফাইল হ্যান্ডেল 2 এসটিডিআরআর, এর মাধ্যমে পুনঃনির্দেশিত 2>

মনে রাখবেন আপনি লগ ফাইলগুলি তৈরি করতে যদি এটি ব্যবহার করেন তবে আপনি যদি না ইউনুথলি_ নাম_ (উদাহরণস্বরূপ তারিখ এবং সময়-স্ট্যাম্পড) লগ ফাইলগুলিতে প্রেরণ না করেন তবে আপনি যদি একই প্রক্রিয়াটি দু'বার চালনা করেন তবে পুনঃনির্দেশিত ওভাররাইট () পূর্ববর্তী লগ ফাইলটি প্রতিস্থাপন করুন)।

>>(হয় stdout- এ বা stderr জন্য) সংযোজন করুন ফাইলটি প্রতিস্থাপন করা হবে না। সুতরাং আপনি একটি ক্রমবর্ধমান লগফিল পান, প্রক্রিয়াটির সমস্ত রান থেকে ফলাফল প্রদর্শন করে - সাধারণত আরও দরকারী।

শুভ ট্রেইল ...


2

পুনঃনির্দেশ মার্জ সিনট্যাক্স ব্যবহার করে সময় মতো ক্রমানুসারে লাইন-বাই-লাইন আউটপুট SDTOUTএবং STDERRঅন্তর্নির্মিত হওয়ার কোনও গ্যারান্টি নেই POSIX

যদি কোনও অ্যাপ্লিকেশন বাফার আউটপুট ব্যবহার করে তবে এমনটি ঘটতে পারে যে একটি স্ট্রিমের পাঠ্যটি অন্যটিতে বাফার বাউন্ডারে isোকানো হয়, যা কোনও পাঠ্য লাইনের মাঝখানে উপস্থিত হতে পারে।

একটি ডেডিকেটেড কনসোল আউটপুট লগার ( যেমন "StdOut/StdErr Logger"দ্বারা 'LoRd MuldeR') এই জাতীয় কোনও কাজের জন্য আরও নির্ভরযোগ্য হতে পারে।

দেখুন: মুলডিআরের ওপেনসোর্স প্রকল্পগুলি


0

একটি ব্যাচের ফাইলে (উইন্ডোজ and এবং তারপরের) আমি এই পদ্ধতিটি সবচেয়ে নির্ভরযোগ্য বলে মনে করেছি

Call :logging >"C:\Temp\NAME_Your_Log_File.txt" 2>&1
:logging
TITLE "Logging Commands"
ECHO "Read this output in your log file"
ECHO ..
Prompt $_
COLOR 0F

স্পষ্টতই, আপনি যে কোনও আদেশ চান তা ব্যবহার করুন এবং আউটপুটটি পাঠ্য ফাইলে পরিচালিত হবে। এই পদ্ধতি ব্যবহার করে হয় নির্ভরযোগ্য তবে পর্দায় কোন আউটপুট।


(মূলত একই উত্তর বছর পূর্বে কয়েক বার দেওয়া।) আপনার সাথে পর্দায় আউটপুট জোর করতে পারেন >con echo This goes to screenজন্য ব্যবহারকারীর ইনপুট এছাড়াও দরকারী >con set /p "var="Input: "নোট: যারা লাইন হবে শুধুমাত্র পর্দায় প্রদর্শিত হবে এবং না ফাইল থেকে আপনাকে পুনঃনির্দেশিত করা।
স্টিফান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.