/ / बैच स्क्रिप्टिंग: इस परिदृश्य में stdout कार्य को पुनर्निर्देशित क्यों नहीं करता है? - विंडोज़, पावरहेल, बैच-फाइल, सीएमडी, कमांड-प्रॉम्प्ट

बैच स्क्रिप्टिंग: क्यों इस परिदृश्य में stdout कार्य पुनर्निर्देशित नहीं करता है?-विंडोज, powershell, बैच-फ़ाइल, सीएमडी, कमांड प्रॉम्प्ट

यदि आप कमांड प्रॉम्प्ट खोलते हैं और इसे टाइप करते हैं:

echo foobar > nul

यह तब से कुछ भी प्रिंट नहीं करेगा nul इसके सभी इनपुट निगलता है। लेकिन अगर आप पावरशेल के साथ कमांड चलाते हैं:

powershell "echo foobar" > nul

यह उत्पादन होगा foobar कंसोल के लिए। यह क्यों है, और मैं इसे ठीक करने के लिए क्या कर सकता हूं?

संपादित करें: यहाँ का उत्पादन है $PSVersionTable। ऐसा लगता है कि मैं PowerShell v5.0 का उपयोग कर रहा हूं।

उत्तर:

जवाब के लिए 5 № 1

नोट: मैं आपको मान रहा हूं "से अपना आदेश आवेदक कर रहा हूं cmd.exe, PowerShell के भीतर से नहीं, जो मैं देख रहा हूं लक्षणों के अनुरूप है।

मेथिंक आप "एक पर ठोकर खाई है बग पीएस (पावरशेल) v5 में (v3 में मौजूद नहीं है; प्रश्न पर टिप्पणियों का सुझाव है कि यह भी v4 में नहीं है), हालांकि मैं पूरी तरह समझ नहीं पा रहा हूं पुनश्च दोषी है, क्योंकि मुझे उम्मीद है cmd.exe पुनर्निर्देशन को संभालने के लिए।
मुझे कुछ याद आ रहा है, हालांकि, मुझे बताएं।

शक्ति कोशिका चाहिए इसकी तथाकथित सफलता स्ट्रीम भेजें - डिफ़ॉल्ट रूप से चीजें आउटपुट, जिसमें शामिल हैं echo, जो एक उपनाम है Write-Output - बाहरी दुनिया के लिए stdout.

पुराने पीएस संस्करणों में >NUL प्रभावी रूप से PowerShell के आउटपुट को दबा देता है।
उत्सुकता से, v5 में बग केवल प्रभावित करता है NUL, जबकि एक को पुनर्निर्देशित करते हैं वास्तविक फ़ाइल काम करता है।

से संबंधित समाधान:

यदि आपका कोड v2- संगत है, इसे इस्तेमाल करे:

powershell -version 2 "echo foobar" > NUL

अन्यथा, एक पर रीडायरेक्ट करें वास्तविक फाइल को बाद में हटाएं और हटाएं:

powershell "echo foobar" > "%TEMP%NUL-bug-workaround" & del "%TEMP%NUL-bug-workaround"