আপনি যে কমান্ডটি ব্যবহার করছেন সেটি ব্যর্থ হচ্ছে তা আপনি প্রদর্শন করেন নি। আপনি যদি এটি আপনার প্রশ্নে দেখান তবে আপনার পক্ষে সমাধান খুঁজে পাওয়া আরও সহজ।
আমি আশা করি আপনার আদেশটি এরকম কিছু:
C:\>foo.exe|c:\Program Files (x86)\something\test.txt
আপনি যে ত্রুটিটি পেয়ে যাচ্ছেন তা হ'ল কিছু চিহ্নের মধ্যে রয়েছে:
'c:/Program' is not recognized as an internal or external command, operable program or batch file.
প্রথম:
... is not recognized as an internal or external command, operable program or batch file.
এটি সাধারণত ঘটে যখন আপনি একটি এর |পরিবর্তে কোনও ফাইলকে পুনর্নির্দেশের চেষ্টা করেন >।
দ্বিতীয়ত:
'c:/Program' ...
শূন্যস্থান সম্বলিত কোনও ফাইলের নাম (বা পথ) নির্দিষ্ট করার সময়, আপনাকে অবশ্যই এটি দ্বিগুণ-উদ্ধৃতি চিহ্ন ( "...") দিয়ে ঘিরে রাখতে হবে । এর কারণ যখন অপারেটিং সিস্টেম ফাইল নির্ণয় করা হয়, এটা ফাইলের নাম খুঁজছেন যখন এটি একটি unquoted স্থান encounters বন্ধ হবে পুনর্নির্দেশ করতে: "c:/Program"।
এটা চেষ্টা কর:
foo.exe>"c:\Program Files (x86)\something\test.txt"
উপরেরটি যদি foo.exeটেক্সট ফাইল থেকে আউটপুট ক্যাপচারে কাজ না করে , তবে আর একটি সম্ভাবনা রয়েছে ...
যদি প্রোগ্রামটি foo.exeতার আউটপুট STDERRপরিবর্তে লিখতে থাকে তবে একটি একক দিয়ে সাধারণ পুনর্নির্দেশ ব্যবহার STDOUTকরে আউটপুট foo.exeআটকানো হবে না >। আপনার এটি এটি করতে হবে:
foo.exe>"c:\Program Files (x86)\something\test.txt" 2>&1
সম্পাদনা:
ফাইল পুনর্নির্দেশকরণ এবং 2>&1স্বরলিপি সম্পর্কে এখানে একটি ব্যাখ্যা ।
কোনও প্রোগ্রাম টার্মিনালে লিখলে এটি দুটির মধ্যে একটিতে লিখতে পারে Streams।
স্ট্রিম 1 হিসাবে উল্লেখ করা হয় STDOUTবা মান- আউটপুট । সাধারণত, প্রোগ্রামগুলি স্ট্রিম 1 এ তাদের "স্বাভাবিক" আউটপুট লেখেন ।
স্ট্রিম 2 হিসাবে উল্লেখ করা হয় STDERRবা মান- ত্রুটি । সাধারণত, প্রোগ্রামগুলি স্ট্রিম 2 এ তাদের "ত্রুটি" আউটপুট (ত্রুটি এবং সতর্কতা বার্তা) লিখে ।
কোনও প্রোগ্রাম কোনও নির্দিষ্ট আউটপুট লেখেন STDOUTবা STDERRনা প্রোগ্রামার দ্বারা নির্ধারিত হয় এবং কীভাবে তারা প্রোগ্রামটি লিখেছিল। কিছু প্রোগ্রাম সমস্ত আউটপুট (সাধারণ আউটপুট এবং ত্রুটি) প্রেরণে লিখিত হয় STDOUT।
যখন কোনও প্রোগ্রাম কোনও আউটপুট পুনঃনির্দেশ ছাড়াই চালিত হয়, সমস্ত স্বাভাবিক এবং ত্রুটি আউটপুট STDOUTআউটপুট বা STDERRআউটপুট কি তার মধ্যে কোনও পার্থক্য ছাড়াই টার্মিনাল স্ক্রিনে প্রেরণ করা হয় ।
আপনি যখন >এই জাতীয় একটির সাথে "সাধারণ" পুনঃনির্দেশটি করেন :
foo.exe > "c:\Program Files (x86)\something\test.txt"
আপনি কোন স্ট্রিমটি ফাইলটিতে পুনঃনির্দেশিত হচ্ছে তা উল্লেখ করছেন না , সুতরাং স্ট্রিম 1 ধরে নেওয়া হয়েছে।
এটি যেমন আপনি এটি টাইপ করেছেন তেমন:
foo.exe 1> "c:\Program Files (x86)\something\test.txt"
এটি কমান্ড ইন্টারপ্রেটারকে ( cmd.exe) কে STDOUTনির্দিষ্ট ফাইলনামে (স্ট্রিম 1) এর জন্য প্রোগ্রাম আউটপুট ক্যাপচার করতে বলে । 1মধ্যে 1>স্ট্রিম 1 বোঝায়।
এক্ষেত্রে সমস্ত সাধারণ প্রোগ্রাম ফাইলটিতে ধারণ করা হয়, তবে প্রোগ্রামটি যদি STDERR(স্ট্রিম 2) লিখিত হয়, তবে আউটপুট ক্যাপচার হবে না এবং স্ক্রিনে প্রদর্শিত হবে। এটি এটি করার জন্য সাধারণত "কাঙ্ক্ষিত" উপায় এটি যাতে আপনি সাধারণ প্রোগ্রাম আউটপুট ক্যাপচার করার সময়, কোনও ত্রুটি দেখা দিলে আপনি পর্দায় দেখতে পারেন।
আপনি যদি কোনও ফাইলে "সাধারণ" আউটপুট এবং অন্য কোনও ফাইলে "ত্রুটি" আউটপুট ক্যাপচার করতে চান তবে আপনি এটি এইভাবে করতে পারেন:
foo.exe > "c:\output.txt" 2> "C:\error.txt"
or
foo.exe 1> "c:\output.txt" 2> "C:\error.txt"
আপনি যদি "নরমাল" আউটপুট এবং "ত্রুটি" আউটপুট একই ফাইলটিতে ধারণ করতে চান তবে আপনি এটিকে এটি নির্দিষ্ট করতে পারেন:
foo.exe > "c:\output.txt" 2>&1
এটি মূলত এটি নির্দিষ্ট করার একটি "শর্টহ্যান্ড" উপায় এবং এর অর্থ স্ট্রিম 1টিকে নির্দিষ্ট ফাইলে পুনর্নির্দেশ করা এবং স্ট্রিম 2 কে একই "স্থান" (ফাইল) এ স্ট্রিম 1 হিসাবে পুনঃনির্দেশ করা ।
সম্পাদনা:
পেসারিয়ার জিজ্ঞাসা:
Foo.exe> "সি: \ আউটপুট.txt" 2> & 1 এবং foo.exe> "সি: \ আউটপুট.txt" 2> "সি: \ আউটপুট.টেক্সট" এর মধ্যে কি কোনও পার্থক্য রয়েছে? তারা কি অভিন্ন?
সংক্ষিপ্ত উত্তর: আপনি ভাবেন যে এগুলি অভিন্ন, তবে তা নয়। তারা ভিন্ন ধরনের.
পুনর্নির্দেশের সাহায্যে >"filename.ext", 1>"filename.ext"বা 2>"filename.ext", "আউটপুট.ইেক্সট" নামে >একটি নতুন ফাইলে আউটপুট লেখার কারণ হয় । "Filename.ext" ফাইলটি ইতিমধ্যে উপস্থিত থাকলে, এটি প্রথমে মুছে ফেলা হবে।
সুতরাং, ব্যবহার করে:
foo.exe> "c: \ output.txt" 2> "সি: \ আউটপুট.txt"
উভয় পুনর্নির্দেশগুলি একই ফাইলটিতে লেখার চেষ্টা করছে এবং উভয়ই যদি ফাইলটি ইতিমধ্যে বিদ্যমান থাকে তবে মুছতে চেষ্টা করছে এমন একটি "দ্বন্দ্ব" সৃষ্টি করে। এটি সম্ভবত অনাকাঙ্ক্ষিত আচরণের কারণ হবে। সাধারণত, আউটপুটগুলির মধ্যে একটি বা অন্য, বা উভয়ই পুরোপুরি ধরা যায় না বা অনুমানযোগ্য ict
আসল ফলাফল অপারেটিং সিস্টেম এবং সংস্করণ উপর নির্ভর করবে, এবং কার্যকর করা কমান্ড উপর নির্ভর করে। সম্ভবত কি ঘটবে তা হ'ল:
1 পুনর্নির্দেশগুলির একটিতে প্রেরিত আউটপুট ক্যাপচার বা আংশিকভাবে ক্যাপচার হয়ে যাবে এবং অন্য পুনঃনির্দেশে প্রেরিত আউটপুট নষ্ট হবে। 2 অপারেটিং সিস্টেম কমান্ড সম্পর্কে অভিযোগ করবে এবং ফলাফলগুলি উভয়ই ক্যাপচার হবে না (পুরোপুরি)। 3 অপরিজ্ঞাত, অনাকাঙ্ক্ষিত, অপ্রত্যাশিত, অপ্রত্যাশিত আচরণ।
উইন্ডোজ 7 এবং সম্ভবত উইন্ডোজ ভিস্তা / 8/10 এবং সম্ভবত উইন্ডোজ এক্সপিতে অপারেটিং সিস্টেম কমান্ড সম্পর্কে অভিযোগ করবে এবং কমান্ডটি বাতিল হয়ে যাবে।
উদাহরণস্বরূপ (উইন্ডোজ)): আমার নামের একটি ফোল্ডার রয়েছে: "C:\Temp\emptyfolder"এবং "নাইরেস্টিভেন্টিফিল" নামের একটি ফাইল সেখানে নেই।
C:\>cd "\Temp\emptyfolder"
C:\Temp\emptyfolder>dir nonexistantfile>output.txt
File Not Found
C:\Temp\emptyfolder>type output.txt
Volume in drive F is FFFFx1tb
Volume Serial Number is 4011-A5C6
Directory of C:\Temp\emptyfolder
C:\Temp\emptyfolder>
এই ক্ষেত্রে, একটি পুনঃনির্দেশ ( >output.txt) ব্যবহার করে , dirকমান্ডের আউটপুট ফাইলটি ধারণ করে: output.txtএবং ত্রুটি বার্তাটি File Not Foundস্ক্রিনে প্রদর্শিত হয় ... এটি প্রত্যাশিত আচরণ।
এখন, উভয়ই পুনঃনির্দেশ ("> ফাইল" এবং "2> ফাইল") ব্যবহার করে:
C:\Temp\emptyfolder>dir nonexistantfile>output.txt 2>output.txt
The process cannot access the file because it is being used by another process.
C:\Temp\emptyfolder>type output.txt
C:\Temp\emptyfolder>
এই ক্ষেত্রে, অপারেটিং সিস্টেমটি অভিযোগ করেছে যে (আউটআউট) ফাইলটি ইতিমধ্যে ব্যবহৃত। এবং "আউটপুট.টিএসটিএক্স" ফাইলটি খালি (0 বাইট) শেষ হয়ে যায় এবং পুনঃনির্দেশগুলির উভয়েরই আউটপুট হারিয়ে যায়।
এখন, শেষ অবধি, উভয়ই পুনর্নির্দেশগুলি (">" ফাইল "এবং" 2> & 1 ") ব্যবহার করে:
C:\Temp\emptyfolder>dir nonexistantfile>output.txt 2>&1
C:\Temp\emptyfolder>type output.txt
Volume in drive C is CCCCCCCC
Volume Serial Number is 1234-ABCD
Directory of C:\Temp\emptyfolder
File Not Found
C:\Temp\emptyfolder>
এই ক্ষেত্রে, "> ফাইল" "স্ট্রিম 1" ("স্ট্যান্ডার্ড আউটপুট") এর আউটপুটটিকে ফাইলের কাছে ধরা দেয়। এবং "2> & 1" "স্ট্রিম 2" ("ত্রুটি আউটপুট") এর জন্য আউটপুটটিকে ইতিমধ্যে পুনঃনির্দেশিত "স্ট্রিম 1" এর মাধ্যমে প্রেরণ এবং (একই) ফাইলে ক্যাপচারের কারণ করে।
এটিও গুরুত্বপূর্ণ যে অর্ডারটি গুরুত্বপূর্ণ। অর্ডারটি এর বিপরীতে:
dir nonexistant 2>&1 >output.txt
একই নয় এবং সম্ভবত আপনাকে পছন্দসই ফলাফল দেবে না।
এই ক্ষেত্রে, "2> & 1", যা আগে দেখা এবং পূর্ববর্তী করা হয়, "স্ট্রিম 2" ("ত্রুটি আউটপুট") এর জন্য আউটপুটটি যেখানে "স্ট্রিম 1" বর্তমানে নির্দেশিত হয়েছে সেখানে পুনঃনির্দেশিত করে মুহূর্তটি, (ডিফল্টরূপে), পর্দা। এবং "> ফাইল" "স্ট্রিম 1" ("স্ট্যান্ডার্ড আউটপুট") এর আউটপুট ফাইলটিতে ধারণ করে। শেষ ফলাফলটি হ'ল কমান্ডের আউটপুট ("স্ট্রিম 1") ফাইলটিতে ধরা পড়বে, তবে ত্রুটি আউটপুট ("স্ট্রিম 2") এখনও পর্দায় যাবে (ফাইলটিতে নয়)।