2016-02-08 4 views
15

में पिछली नई लाइन को रोकें I PowerShell के Out-File कमांड को पाठ के बाद एक नई लाइन जोड़ने से कैसे रोकूं?पावरशेल आउट-फ़ाइल कमांड

उदाहरण के लिए, निम्न आदेश चलाकर "टेस्टटेस्ट" की बजाय "testTest \ r \ n" सामग्री वाली एक फ़ाइल उत्पन्न करती है।

"TestTest" | Out-File -encoding ascii test.txt 

उत्तर

22

PowerShell 5.0 + में, आप का प्रयोग करेंगे:

"TestTest" | Out-File -encoding ascii test.txt -NoNewline 

लेकिन पिछले संस्करणों में तो आप बस उस cmdlet के साथ नहीं कर सकते।

इस प्रयास करें:

[System.IO.File]::WriteAllText($FilePath,"TestTest",[System.Text.Encoding]::ASCII) 
2

करने के लिए पूरकbriantist's helpful answer फिर -NoNewline:

निम्नलिखित सिर्फ Out-File के लिए नहीं लागू होता है, लेकिन तुलनात्मक रूप से करने के लिए Set-Content/Add-Content रूप में अच्छी तरह; जैसा कि कहा गया है, -NoNewline को पीएसवी 5 + की आवश्यकता है।

नोट -NoNewline इसका मतलब है कि कई उत्पादन करने के लिए वस्तुओं के साथ, यह न सिर्फ एक अनुगामी न्यू लाइन (लाइन ब्रेक) किसी भी नई-पंक्तियों है कि दबा दिया जाता है, लेकिन

दूसरे शब्दों में: इनपुट ऑब्जेक्ट्स के स्ट्रिंग प्रस्तुतियों को सीधे विभाजित किया जाता है, बिना विभाजक (टर्मिनेटर)

इसलिए, निम्न कमांड एक ही फाइल सामग्री (TestTest एक अनुगामी न्यू लाइन के बिना) में परिणाम:

# Single input string 
"TestTest" | Out-File -encoding ascii test.txt -NoNewline 

# Equivalent command: 2-element array of strings that are directly concatenated. 
"Test", "Test" | Out-File -encoding ascii test.txt -NoNewline 

आदेश में के लिए जगह नई-पंक्तियों के बीच केवल , लेकिन नहीं भी के बाद उत्पादन ऑब्जेक्ट्स, आपको स्पष्ट रूप से:

"Test", "Test" -join "`r`n" | Out-File -encoding ascii test.txt -NoNewline 
के साथ ऑब्जेक्ट्स में शामिल होना चाहिए

यूनिक्स-शैली एलएफ-केवल न्यूलाइन बनाने के लिए, "`r`n" के बजाय "`n" का उपयोग करें।

चेतावनी:

ऊपर -join समाधान परोक्ष इनपुट तार करने के लिए वस्तुओं, यदि पहले से नहीं कर रहे हैं धर्मान्तरित और प्रत्येक वस्तु है, जो अक्सर एक अलग पैदावार पर नेट .ToString() विधि को फोन करके ऐसा नहीं करता है Out-File की तुलना में प्रतिनिधित्व सीधे बनाएगा, क्योंकि Out-File पावरशेल के डिफ़ॉल्ट आउटपुट फॉर्मेटर का उपयोग करता है; उदाहरण के लिए, (Get-Date).ToString() के आउटपुट की तुलना करें और केवल Get-Date

अपने इनपुट केवल तार और/या गैर तार जिसका .ToString() प्रतिनिधित्व संतोषजनक है, इसके बाद के संस्करण समाधान काम करता है, लेकिन ध्यान दें कि यह तो है आम तौर पर Set-Content cmdlet, एक ही stringification लागू होता है जो उपयोग को प्राथमिकता दी शामिल हैं परोक्ष।
Out-File और Set-Content के बीच अंतरों की पूरी चर्चा के लिए, मेरे this answer देखें।

यदि आपके इनपुट में गैर स्ट्रिंग्स हैं जिन्हें आप कंसोल पर प्रिंट करते समय प्रारूपित करना चाहते हैं, तो वास्तव में कोई आसान समाधान नहीं है: जबकि आप Out-String का उपयोग डिफ़ॉल्ट फॉर्मेटर के साथ प्रति-ऑब्जेक्ट स्ट्रिंग प्रस्तुतियों को बनाने के लिए कर सकते हैं, Out-String की -NoNewline की कमी (v5.1; this GitHub issue के अनुसार इसे पेश करने का सुझाव दिया गया है) हमेशा नई रेखाएं उत्पन्न करेगा।

+1

यह एक महत्वपूर्ण बात है! – briantist

संबंधित मुद्दे