मैं सीधे नोटपैड पर आउटपुट कंसोल कैसे कर सकता हूं?


47

मैं कमांड प्रॉम्प्ट या गिट शेल पर एक एप्लिकेशन चला रहा हूं , और बाद में आसान समीक्षा और संपादन के लिए मैं नोटपैड में आउटपुट प्राप्त करना चाहूंगा।

मैंने निम्नलिखित की कोशिश की, लेकिन मुझे हमेशा नोटपैड का एक खाली उदाहरण मिलता है:

diff file1.txt file2.txt | notepad

मुझे पता है कि मैं आउटपुट को किसी अन्य फ़ाइल पर पुनर्निर्देशित कर सकता हूं और फिर फ़ाइल को नोटपैड में खोल सकता हूं। मैं अतिरिक्त कदम से बचना चाहूंगा, क्योंकि मैं सिर्फ गैर-विंडोज सिस्टम पर विम या उससे कम में पाइपिंग करता हूं ।


2
बेशक, आप moreविंडोज पर भी पाइप कर सकते हैं।
गाबे

1
फाइल करने के लिए पाइप क्यों नहीं है और बस शेल को नई फ़ाइल पथ निष्पादित करें - ओएस को प्रस्तुति एप्लिकेशन को संभालने दें। यह है है नोटपैड होने के लिए?
गुस्सोर

@Gusdor प्रश्न मुख्य रूप से एक (अस्थायी) फ़ाइल बनाने से बचने के बारे में है।
डेर होकस्टाप्लर

1
नोटपैड की कार्यक्षमता इतनी सीमित है कि आप इसके साथ कुछ भी कर सकते हैं। चूंकि आप परिचित हैं vim, तो बस इसे क्यों स्थापित करें?
सियुआन रेन

@CR मैं अपने कंप्यूटरों पर ऐसा कर सकता था, लेकिन मैं नियमित रूप से उन कंप्यूटरों पर काम करता हूं जो मेरे पास नहीं हैं। इसलिए यह जानना उपयोगी है कि थर्ड-पार्टी सॉफ्टवेयर इंस्टॉल किए बिना कौन से विकल्प हैं।
डेर होकस्टाप्लर

जवाबों:


63

मैं जो बता सकता हूं, उससे नोटपैड में सीधे पाइप करने का कोई तरीका नहीं है।

हालाँकि, आप नोटपैड में पाइप कर सकते हैं clipऔर पेस्ट कर सकते हैं , जैसे:

 diff file1.txt file2.txt | clip && notepad

फिर सिर्फ नोटपैड में Ctrl+ दबाएँ V


3
यदि आप आउटपुट को file3.txt पर रीडायरेक्ट करेंगे, और तब यह काम करेगा && notepad file3.txt?
कोनरक

4
); @Konerak हां, यह काम करेगा और यह कि वास्तव में क्या मैं बचने की कोशिश कर रहा था (प्रश्न में समझाया गया है) है
डेर Hochstapler

32

यदि आप एक ग्राफिकल वातावरण पसंद करते हैं, तो विम या अपने मामले में जीवीएम का उपयोग करने पर विचार करें ।

फिर आप एक एकल हाइफ़न के साथ एक तर्क के रूप में पाइप कर सकते हैं, जो मानक इनपुट से पढ़ने के लिए विम / जीवीएम को निर्देश देता है।

diff file1.txt file2.txt | gvim -

1
इसे स्थापित करें, नोटपैड वास्तव में सीमित है आप इसके लिए इसका उपयोग नहीं कर सकते। आप इसे पोर्टेबल ऐप्स में भी कर सकते हैं: portableapps.com/apps/development/gvim_portable
higuita

3
इसे वीम के भीतर से भी कर सकते हैं::%!diff file1.txt file2.txt
थोड़ा

@TankorSmash तो क्या मैं, लेकिन यह सवाल का बिंदु नहीं है?) आगे के लिए और vim (या किसी अन्य विषय) के बारे में चर्चा के लिए, कृपया मुझे सुपर उपयोगकर्ता चैट पर मिल जाए , टिप्पणी सूत्र एक बातचीत करने का एक शानदार तरीका नहीं है :(
डेर होकस्टापलर

1
@OliverSalzburg मैं यह सुझाव देने की कोशिश कर रहा था कि gvim विंडोज पर उपलब्ध है, क्योंकि मैंने आपकी टिप्पणी को समझा कि इसका मतलब यह नहीं था। मैं गलत था।
टैंकरस्मैश

-इसका अर्थ अक्सर "स्टडिन से पढ़ने" के लिए किया जाता है, इसलिए यह कड़ाई से सीमित नहीं है vim। अन्य संपादक उपयोग करते हैं -i(जैसे kate)।
बकुरी

8

यहाँ एक छोटा विंडोज प्रोग्राम है जो इसे ठीक से करता है (क्लिपबोर्ड को क्लोब किए बिना)। यह 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कहीं से भी कॉल कर सकते हैं !


ईमानदारी से अगर आप एक PS स्क्रिप्ट लिखने जा रहे हैं, तो मैं अस्थायी फ़ाइल फ़ोल्डर में एक गाइड नाम के साथ एक फ़ाइल बनाऊंगा और जब मैं किया गया था तब इसे हटा दूंगा। पेस्ट को स्वचालित करना बहुत भंगुर लगता है (जैसे कि क्या होगा अगर आप गलत समय या किसी चीज़ पर ध्यान केंद्रित करते हैं)?
केसी

@emodendroket दुर्भाग्य से, जब आप किसी प्रोग्राम में स्ट्रीम इनपुट को जबरदस्ती डालने की कोशिश कर रहे हैं जो मूल रूप से समर्थन नहीं करता है, तो कुछ भी वास्तव में साफ नहीं है। एक अस्थायी फ़ाइल बनाने की अपनी (छोटी) कमियां हैं: आपको वास्तव में "नई फ़ाइल" नहीं मिलती है, इसलिए Saveसंशोधित व्यवहार पर बाहर और बाहर अलग हैं। नोटपैड को स्वयं बदलने या पाठ को सीधे अपने संपादन नियंत्रण में इंजेक्ट करने के लिए, कई अन्य विकल्प नहीं हैं। बेशक, इस विधि में क्लोबबेरिंग क्लिपबोर्ड सामग्री का दोष है (हालांकि उन्हें वैसे भी अल्पकालिक माना जाता है)। मुझे नहीं लगता कि ध्यान खोना एक प्रमुख मुद्दा है; यह एक ...
बॉब

... बेहद असंभावित दौड़ की स्थिति ( ShowWindowकेस्ट्रोक्स भेजने और भेजने के बीच )। और इस विधि का उपयोग करने के लिए थोड़ा और अधिक सेटअप (स्क्रिप्ट फ़ाइल बनाने) की आवश्यकता है, हाँ।
बॉब

5

AutoHotkey का उपयोग कैसे करें ?

निम्नलिखित को सहेजें stdin.ahkऔर इसे अपने AutoHotkey निर्देशिका में रखें:

StdIn(max_chars=0xfff)
{
    static hStdIn=-1
    ; The following is for vanilla compatibility
    ptrtype := (A_PtrSize = 8) ? "ptr" : "uint"

    if (hStdIn = -1)
    {
        hStdIn := DllCall("GetStdHandle", "UInt", -10,  ptrtype) ; -10=STD_INPUT_HANDLE
        if ErrorLevel
            return 0
    }

    max_chars := VarSetCapacity(text, max_chars*(!!A_IsUnicode+1), 0)

    ret := DllCall("ReadFile"
        ,  ptrtype, hStdIn        ; hFile
        ,  "Str", text          ; lpBuffer
        , "UInt", max_chars*(!!A_IsUnicode+1)     ; nNumberOfBytesToRead
        , "UInt*", bytesRead    ; lpNumberOfBytesRead
        ,  ptrtype, 0)            ; lpOverlapped

    return text
}

loop 
{
    sleep 100 ;wait for data
    Buffer:=StdIn()
    PipeText:=PipeText . Buffer
    IfWinActive Untitled - Notepad
        {
        SendInput {Raw}%PipeText%
        PipeText = 
        }
}

फिर कमांड लाइन:

ping -t www.google.com | AutoHotkeyA32.exe stdin.ahk

नोटपैड में कमांड के आउटपुट को पाइप करता है, इसलिए जब तक खिड़की खुली और शीर्षक वाली न हो जाए Untitled - Notepad। इस घटना में कि खिड़की सक्रिय नहीं है, तो यह खिड़की के सक्रिय होने तक पृष्ठभूमि में प्रसन्नतापूर्वक बफर करेगा। तुम भी एक और कार्यक्रम के लिए दूर जा सकते हैं और यह एक बार फिर बफरिंग पर ले जाएगा।

यह तब लगता है जब हमारे मानक इनपुट के लिए कार्यक्रम outputting मर जाता है, हालांकि ...

(जानकारी के लिए, स्टडिन () कोड बेशर्मी से यहाँ से आधा था )


...वाह। यदि आप उस सीमा तक जाने वाले हैं, तो एक पूरा संकलित कार्यक्रम लिख सकते हैं! संभवतः अधिक कुशल भी हो: हालांकि प्रयास के लिए पी अपवोट।
बॉब

मुझे डर से नीचे उतरना। शास्त्रीय अर्थ में अतिरंजना। संस्करण इस स्क्रिप्ट को नियंत्रित करने वाला कौन है? क्या ऑटोहोटकी को व्यावसायिक अनुप्रयोगों के लिए लाइसेंस की आवश्यकता है? कौन निगरानी रखता है?
गुसादोर

7
@Gusdor संपूर्ण इंटरनेट गैर-संस्करण नियंत्रित कोड स्निपेट्स से भरा है। हमारे पास इस पद के लिए एक संशोधन इतिहास होने का भी लाभ है । मैं यह भी नहीं देखता कि इस सवाल से वाणिज्यिक लाइसेंसिंग का क्या संबंध है? AHK का उपयोग बहुत से लोग करते हैं, और उन्हें यह उत्तर उपयोगी लग सकता है।
24'14

@slhck मैं केवल इस समाधान के नुकसान पर टिप्पणी कर रहा था, इसकी वैधता नहीं।
गुस्सोर

@ एसएलएचके: इस साइट पर सामग्री क्रिएटिव कॉमन्स द्वारा कवर की गई है।
ब्रायन

4

यह पूरी तरह से संभव है; मैंने बस कोशिश की। मैं मान रहा हूँ कि नोटपैड डिफ़ॉल्ट रूप से txt फाइल खोलने के लिए तैयार है:

diff file1.txt file2.txt > output.txt && start output.txt && timeout /T 3 && del output.txt

ठीक है, आप तकनीकी रूप से एक फ़ाइल बना रहे हैं, लेकिन यह सहेजा नहीं जाता है।

अधिक में डालना भी एक विकल्प है।


4
सावधान रहें - यदि आपके पास पहले से ही output.txtयह है तो यह इसे बंद कर देगा। मार्जिन सुरक्षित करने के लिए उपयोग किया जाएगा %temp%/somerandomstring.txt
बॉब

अस्थायी निर्देशिका में आउटपुट फ़ाइल को सहेजना अधिक सुरक्षित है - इस उत्तर पर एक नज़र डालें ।
1955 को Lu55

1

यह पूरा करने के लिए एक बदसूरत, लेकिन प्रभावी तरीका है:

$OutputString = 'Hello World'
$WScript = New-Object -ComObject 'wscript.shell'
$WScript.Run('notepad.exe') | Out-Null
do 
    {
    Start-Sleep -Milliseconds 100
    }
until ($WScript.AppActivate('notepad'))
$WScript.SendKeys($OutputString)

बस पाठ आउटपुट भेजने के लिए सुनिश्चित करें। अन्य डेटा संभावित रूप से नियंत्रण वर्ण (CTRL, ALT, DEL, आदि) के रूप में व्याख्या किए जाएंगे।


0

यहाँ VBScript आधारित समाधानों की एक जोड़ी है जो काम कर सकती है (हालाँकि .. वे समय पर खुलने वाले ऐप्स पर थोड़ा भरोसा करते हैं):

pip2key.vbs - पहले तर्क के रूप में निर्दिष्ट एप्लिकेशन को खोलता है, और फिर इसे केस्ट्रोक्स के रूप में StdIn भेजता है। Cscript.exe के साथ उपयोग करने की आवश्यकता है क्योंकि wscript StdIn पहुँच प्रदान नहीं करता है। संभवतः लंबे दस्तावेजों के लिए काफी धीमा है - लेकिन क्लिपबोर्ड को क्लोब नहीं करेगा

Set inPipe=wScript.StdIn
Set wShell=wScript.CreateObject("wscript.shell")
wShell.Run wScript.Arguments(0), 5 ' Execute specified app, foreground it's window
wScript.Sleep 500 ' Wait for app to load
KeysToEscape="{}[]()^+%"
KeysToDrop=vbLf
While Not inPipe.AtEndOfStream
    keyChar=inPipe.Read(1)
    If InStr(KeysToDrop, keyChar) = 0 Then
        If InStr(KeysToEscape, keyChar) > 0 Then
            wShell.SendKeys "{" & keyChar & "}"
        Else
            wShell.SendKeys keyChar
        End If
    End If
Wend

उदाहरण का उपयोग: diff file1.txt file2.txt | cscript pipe2key.vbs notepad.exe

या, पेस्टिंट.ओवीबीएस। ऐप लॉन्च करने के बाद CTRL-V ऑपरेशन को स्वचालित करता है (इस प्रकार पिछले उत्तर में उल्लिखित 'क्लिप' कमांड का उपयोग करता है)। पाइप 2key.vbs की तुलना में काफी तेज और क्लीनर (मेरी राय में), लेकिन यह प्रक्रिया क्लिपबोर्ड को अधिलेखित कर देगी

Set wShell=wScript.CreateObject("wscript.shell")
wShell.Run wScript.Arguments(0), 5 ' Execute specified app, foreground it's window
wScript.Sleep 500 ' Wait for app to load
wShell.SendKeys "^v"

उदाहरण का उपयोग: diff file1.txt file2.txt | clip && pasteinto notepad.exe


-1

कुछ इस तरह "काम" हो सकता है।

अजी, यह महसूस नहीं हुआ कि यह कुछ ऐसा है जिसे आप हर बार (इसके ध्वनियों से) मैन्युअल रूप से कर रहे हैं। आप प्रक्रिया को गति देने के लिए प्रत्येक बार कुछ प्रकार के मैक्रो या कुछ करने में सक्षम हो सकते हैं। उस पर यकीन नहीं है।

diff file1.txt file2.txt > file.txt | sleep 1 | notepad.exe file.txt | rm file.txt

यह फ़ाइल के लिए अलग सामग्री को लिखने के लिए समाप्त करना होगा। इसके लिए आदेश में उस भिन्न ऑपरेशन की संपूर्णता को लोड करने के लिए जो मुझे यकीन नहीं है कि यह होगा। अगर ऐसा है तो पाइप के संचालन के बीच किसी तरह ठहराव का एक तरीका हो सकता है।


5
लक्ष्य एक अस्थायी फ़ाइल नहीं बनाना है और मुझे पूरा यकीन है कि आपके सिंटैक्स में कुछ गड़बड़ है;)
डेर होकस्टाप्लर

"बाद में आसान समीक्षा और संपादन के लिए" मुझे लगा कि आप क्या चाहते हैं? और जैसा कि Rev1.0 ने बताया और इसमें संशोधन किया गया है, यह काम करता है। हालांकि यह डॉस के लिए है, मुझे यकीन नहीं है कि अगर साइबरविन के परिणाम समान होंगे।
कोडज़िला

3
मुझे लगता है कि क्योंकि ए और पर्याप्त होगा क्योंकि वास्तव में उन कॉल के बीच "पाइप" होने की आवश्यकता नहीं है।
Rev1.0

3
@ Rev1.0 सही। &, &&और ||एक साथ चेन कमांड के ऑपरेटर हैं। सभी 3 अलग तरीके से व्यवहार करते हैं कि वे कैसे आगे बढ़ते हैं यदि कोई कमांड गैर-0 रिटर्न मान उत्पन्न करता है। |के रूप में यह करने के लिए प्रयोग किया जाता है पूरी तरह से अलग है पाइप से एक से दूसरे कार्यक्रम से उत्पादन। परिणाम वही हो सकता है जो आप चाहते थे, लेकिन एक चेनिंग ऑपरेटर का उपयोग इरादे को स्पष्ट करता है, क्योंकि उस उदाहरण में कोई वास्तविक पाइपिंग वांछित नहीं है। अतिरिक्त संदर्भ के लिए: microsoft.com/resources/documentation/windows/xp/all/proddocs/…
Der Hochstapler

1
@Codezilla मुझे लगता है कि मेरी पोस्ट में विचार आपके लिए काफी समान है, लेकिन यह मान्य कमांड प्रॉम्प्ट सिंटैक्स है।
केसी

-3

मेरी भाषा अंग्रेजी नहीं है इसलिए गलतियों के लिए खेद है।

मुझे लगता है कि यू सीधे आउटपुट को नोटपैड में नहीं डाल सकता है। हो सकता है कि मैं इसके बारे में गलत हूं। आपको उस पर काम करने के लिए आउटपुट के साथ एक फ़ाइल बनानी होगी। कमांड टी आउटपुट को दो तक पाइप कर सकता है या एक ही समय में अधिक कमांड या फाइल हो सकता है।

आदमी टी

जब आप फ़ाइल में आउटपुट को कम करते हैं तो>> का उपयोग करना न भूलें। > फ़ाइल को अधिलेखित कर देगा, >> उस फ़ाइल में जो कुछ भी पहले से है उसके बाद आउटपुट जोड़ देगा।


1
teeआमतौर पर विंडोज पर उपलब्ध नहीं है और अगर यह था भी, तो यह इस समस्या के साथ मदद नहीं करेगा।
डेर होकस्टापलर

-4

आप नहीं कर सकते, नोटपैड इसके लिए बहुत सीमित है! बेहतर अभी तक ... सिगविन स्थापित करें और विंडोज के इस "सुविधाओं की कमी" के सभी समाधान। फिर आप पहले से ही ज्ञात कमांड का उपयोग कर सकते हैं।

AFAIK, बहुत कम विंडोज प्रोग्राम पाइपलाइनिंग का समर्थन करते हैं, यहां तक ​​कि GUI कार्यक्रमों के लिए भी बदतर।

आप इसे जोड़ने के लिए "विंडोज़ टेल" कार्यक्रमों में से एक के लिए सुविधा अनुरोधों को खोलने का प्रयास कर सकते हैं।


2
मैं पहले से ही साइबरइन का उपयोग करता हूं। यह वास्तव में नोटपैड के साथ बातचीत करने के लिए विशिष्ट समस्या है।
डेर होकस्टापलर


1
@emodendroket कुछ समय लोग किसी काम के लिए गलत टूल का उपयोग करते हैं ... और लगभग किसी भी मामले में, नोटपैड गलत टूल है, इतना सरल और सीमित है :)
higuita

1
@higuita मैं एक समर्पित Emacs उपयोगकर्ता हूं लेकिन कभी-कभी नोटपैड मैं जो करना चाहता हूं उसके लिए बेहतर उपकरण है।
केसी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.