जवाबों:
किसी फ़ाइल की संपूर्ण सामग्री प्राप्त करने के लिए:
$content = [IO.File]::ReadAllText(".\test.txt")
लाइनों की संख्या:
([IO.File]::ReadAllLines(".\test.txt")).length
या
(gc .\test.ps1).length
हैकिंग की छंटनी में खाली लाइन को शामिल करना शामिल है:
[io.file]::ReadAllText(".\desktop\git-python\test.ps1").split("`n").count
\r\nगिना जाएगा।
Invoke-WebRequest?
एक साइड नोट पर, PowerShell 3.0 में आप Get-Contentनए रॉ स्विच के साथ cmdlet का उपयोग कर सकते हैं :
$text = Get-Content .\file.txt -Raw
Get-Contentने किया, लेकिन यह 3.0 तक नहीं था जो इसे मिला -Raw। इसके बिना, यह एक पंक्ति के रूप में संग्रहीत हो जाता है।
-Rawपैरामीटर कुछ भी देशी द्वारा लागू नहीं किया गया है।
$text = Get-Content $filePath | Out-String
IO.File.ReadAllTextएक रिश्तेदार पथ के साथ मेरे लिए काम नहीं किया, उस में फ़ाइल के लिए लग रहा है %USERPROFILE%\$filePathके बजाय वर्तमान निर्देशिका का (जब कम से कम Powershell आईएसई से चल):
$text = [IO.File]::ReadAllText($filePath)
$text = Get-Content $filePath -Raw
[IO.File]::ReadAllText((Resolve-Path $filePath))
फ़ाइल को पढ़ने के लिए एक और तरीका जो मुझे पसंद है, उसे विभिन्न रूप से परिवर्तनीय संकेतन या चर सिंटैक्स के रूप में संदर्भित किया जाता है और इसमें एक डॉलर चिह्न द्वारा पूर्व में घुसे घुंघराले ब्रेसिज़ के भीतर एक बुद्धि को संलग्न करना शामिल है, बुद्धि के लिए:
$content = ${C:file.txt}
इस संकेतन का उपयोग एल-मान या आर-मान के रूप में किया जा सकता है ; इस प्रकार, आप बस कुछ इस तरह से आसानी से एक फ़ाइल में लिख सकते हैं:
${D:\path\to\file.txt} = $content
एक और उपयोगी उपयोग यह है कि आप एक अस्थायी फ़ाइल के बिना और उप-अभिव्यक्तियों के बिना एक फ़ाइल को संशोधित कर सकते हैं, उदाहरण के लिए:
${C:file.txt} = ${C:file.txt} | select -skip 1
मैं शुरू में इस धारणा से रोमांचित हो गया क्योंकि इसके बारे में कुछ भी पता लगाना बहुत मुश्किल था! यहां तक कि पॉवरशेल 2.0 विनिर्देश में केवल एक बार इसका उपयोग करते हुए केवल एक पंक्ति दिखाने का उल्लेख है - लेकिन इसका कोई विवरण या उपयोग का विवरण नहीं है। मैंने बाद में इस ब्लॉग प्रविष्टि को PowerShell चर पर पाया है जो कुछ अच्छी जानकारी देता है।
इसका उपयोग करने पर एक अंतिम नोट: आपको ड्राइव पदनाम का उपयोग करना होगा, ${drive:filespec}जैसा कि मैंने ऊपर दिए गए सभी उदाहरणों में किया है। ड्राइव के बिना (जैसे ${file.txt}) यह काम नहीं करता है। उस ड्राइव पर फाइलस्पेस पर कोई प्रतिबंध नहीं: यह निरपेक्ष या सापेक्ष हो सकता है।
गेट-कंटेंट डेटा को पकड़ लेता है और इसे एक सरणी में, लाइन द्वारा लाइन में डंप करता है। मान लें कि आपके द्वारा सूचीबद्ध अन्य विशेष आवश्यकताएं नहीं हैं, तो आप अपनी सामग्री को एक चर में सहेज सकते हैं?
$file = Get-Content c:\file\whatever.txt
बस चलाने $fileसे पूरी सामग्री वापस आ जाएगी। तब आप बस $file.Count# कुल लाइनों को प्राप्त करने के लिए (क्योंकि सरणियों में पहले से ही एक गणना पद्धति निर्मित है) कर सकते हैं।
उम्मीद है की यह मदद करेगा! मैं स्क्रिप्टिंग वाइज़ नहीं हूं, लेकिन ऊपर के बहुत सारे सामानों की तुलना में यह मुझे आसान लग रहा था।
$content = [IO.File]::ReadAllText(".\test.txt")के रूप में एक ही बात करने के लिए प्रकट होता है$content = (gc ".\test.txt" | out-string)। चूंकि दोनों में से दूसरा छोटा है, इसलिए मैं यही पसंद करता हूं। दुर्भाग्य से, कुल पंक्तियों की गणना के लिए आपके द्वारा दिए गए तरीकों में से कोई भी खाली लाइनों को ध्यान में नहीं लेता है। कोई अन्य विचार?