यहाँ एक छोटा विंडोज प्रोग्राम है जो इसे ठीक से करता है (क्लिपबोर्ड को क्लोब किए बिना)। यह PowerShell के अनुकूल होना चाहिए, और यदि मुझे समय मिले तो मैं इस उत्तर को अपडेट कर सकता हूं, लेकिन आप सीधे उस प्रोग्राम का उपयोग भी कर सकते हैं।
खैर, कैसे PowerShell के बारे में? कोई अन्य एप्लिकेशन इंस्टॉल करने की आवश्यकता नहीं है। दुर्भाग्य से, आपको अपनी स्क्रिप्ट में कहीं न कहीं एक स्क्रिप्ट फ़ाइल बनाने की आवश्यकता होगीPATH ...
लघु संस्करण आप उपयोग कर सकते हैं
यदि आप ShowInNotepad.batनिम्न सामग्री के साथ एक बैच फ़ाइल (जैसे ) बनाते हैं और इसे अपने PATHकहीं पर रखते हैं:
@echo off
clip
powershell -Command $process = Start-Process -PassThru notepad;$SW_SHOW = 5;$sig = '[DllImport("""user32.dll""")] public static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);';Add-Type -MemberDefinition $sig -name NativeMethods -namespace Win32;[Win32.NativeMethods]::ShowWindow($process.Id, $SW_SHOW) ^| Out-Null;Add-Type -AssemblyName System.Windows.Forms;[System.Windows.Forms.SendKeys]::SendWait('^^V');
आप तब echo blah | ShowInNotepadकहीं से भी कॉल कर सकते हैं !
ध्यान दें कि यह मान लेता है कि आप Windows (Vista +) के हाल-ईश संस्करण का उपयोग कर रहे हैं और PowerShell को अक्षम नहीं किया है या .NET फ्रेमवर्क को अनइंस्टॉल नहीं किया है। दूसरे शब्दों में, एक डिफ़ॉल्ट विंडोज इंस्टॉलेशन काम करेगा।
लंबी व्याख्या और विकल्प
सबसे आसान तरीका है कि मैं पेस्ट ( Ctrl+ V) कार्रवाई को स्वचालित कर सकता हूं । जो कम से कम एक अन्य जवाब पहले से ही कर रहा है, लेकिन वह एएचके का उपयोग करता है - आपके पास लॉक-डाउन कॉर्पोरेट वातावरण में काम करने के लिए पावरशेल प्राप्त करना बेहतर भाग्य हो सकता है।
स्क्रिप्ट के साथ चलो, हाँ?
#start notepad, get process object (to get pid later)
$process = Start-Process -PassThru notepad;
# activate Notepad window
# based on http://stackoverflow.com/a/4994020/1030702
# SW_SHOW activates and shows a window http://msdn.microsoft.com/en-us/library/windows/desktop/ms633548%28v=vs.85%29.aspx
$SW_SHOW = 5;
$sig = '[DllImport("user32.dll")] public static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);';
Add-Type -MemberDefinition $sig -name NativeMethods -namespace Win32;
[Win32.NativeMethods]::ShowWindow($process.Id, $SW_SHOW) | Out-Null;
# send a "Ctrl+V" keystroke to the active window
# from http://stackoverflow.com/a/17851491/1030702
Add-Type -AssemblyName System.Windows.Forms;
[System.Windows.Forms.SendKeys]::SendWait('^V');
यह बहुत सीधा है, इसलिए मैं पहले से ही की गई टिप्पणियों की तुलना में स्क्रिप्ट को समझाने की जहमत नहीं उठाऊंगा।
प्रयोग
इसका उपयोग करने के लिए, आपको बस स्क्रिप्ट को किसी .ps1फ़ाइल (जैसे ShowInNotepad.ps1) में रखने की आवश्यकता है, इसे कहीं अपने स्थान पर रखें PATHऔर फिर powershell ShowInNotepad.ps1उस क्लिपबोर्ड में प्रदर्शित किए जाने वाले पाठ को रखने के बाद कॉल करें ।
उदाहरण:
echo blah | clip && powershell ShowInNotepad.ps1
दुर्भाग्य से, PowerShell स्क्रिप्ट निष्पादित करना कभी-कभी मुश्किल हो सकता है (निष्पादन नीतियां और सभी)। इसलिए, मैंने इस स्क्रिप्ट को एक-लाइनर को दिया है जिसे आप सीधे कमांड प्रॉम्प्ट से कॉल कर सकते हैं, या यहां तक कि एक बैच फ़ाइल में भी डाल सकते हैं:
powershell -Command $process = Start-Process -PassThru notepad;$SW_SHOW = 5;$sig = '[DllImport("""user32.dll""")] public static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);';Add-Type -MemberDefinition $sig -name NativeMethods -namespace Win32;[Win32.NativeMethods]::ShowWindow($process.Id, $SW_SHOW) ^| Out-Null;Add-Type -AssemblyName System.Windows.Forms;[System.Windows.Forms.SendKeys]::SendWait('^^V');
यदि आप ShowInNotepad.batनिम्न सामग्री के साथ एक बैच फ़ाइल (जैसे ) बनाते हैं और इसे अपने PATHकहीं पर रखते हैं:
@echo off
clip
powershell -Command $process = Start-Process -PassThru notepad;$SW_SHOW = 5;$sig = '[DllImport("""user32.dll""")] public static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);';Add-Type -MemberDefinition $sig -name NativeMethods -namespace Win32;[Win32.NativeMethods]::ShowWindow($process.Id, $SW_SHOW) ^| Out-Null;Add-Type -AssemblyName System.Windows.Forms;[System.Windows.Forms.SendKeys]::SendWait('^^V');
आप तब echo blah | ShowInNotepadकहीं से भी कॉल कर सकते हैं !
moreविंडोज पर भी पाइप कर सकते हैं।