পাওয়ারশেল: চলকটিতে পুরো পাঠ্য ফাইল সামগ্রী সংরক্ষণ করুন


118

আমি কোনও ভেরিয়েবলে কোনও পাঠ্য ফাইলের পুরো বিষয়বস্তু (ট্রেলিং ফাঁকা রেখা সহ থাকতে পারে এবং নাও থাকতে পারে) সহ পুরো বিষয়বস্তু সঞ্চয় করতে আমি পাওয়ারশেলটি ব্যবহার করতে চাই । আমি টেক্সট ফাইলে মোট লাইনের সংখ্যা জানতে চাই। এটি করার সবচেয়ে দক্ষ উপায় কোনটি?

উত্তর:


122

কোনও ফাইলের সম্পূর্ণ সামগ্রী পেতে:

$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

1
ধন্যবাদ! $content = [IO.File]::ReadAllText(".\test.txt")হিসাবে একই জিনিস প্রদর্শিত হবে $content = (gc ".\test.txt" | out-string)। যেহেতু দুজনের মধ্যে দ্বিতীয়টি খাটো, সেটাই আমার পছন্দ। দুর্ভাগ্যক্রমে, মোট রেখার সংখ্যা গণনা করার জন্য আপনি যে পদ্ধতি সরবরাহ করেছেন সেগুলির মধ্যে একটিও ফাঁকা রেখাগুলিকে বিবেচনায় নেবে না। অন্য কোন ধারণা?
নিক

@ নিক ইন। নেট (এবং উইন্ডোজ), এর সাথে যে কোনও লাইন \r\nগণনা করা হবে।
মনোজাল্ড

আমি কিছু পরীক্ষা-নিরীক্ষা করছিলাম এবং আপনার আপডেট হওয়া উত্তর হিসাবে একই জিনিসটি নিয়ে এসেছি, তবে আমি আপনার সহায়তা ছাড়া সেখানে পেতাম না, তাই আপনাকে অনেক ধন্যবাদ!
নিক

এর সাথে স্বচ্ছভাবে একত্রিত করার কোনও উপায় আছে কি Invoke-WebRequest?
করিম

189

পার্শ্ব নোটে, পাওয়ারশেল Get-Content3.0.০ এ আপনি নতুন কাঁচা সুইচ দিয়ে সেমিডলেট ব্যবহার করতে পারেন :

$text = Get-Content .\file.txt -Raw 

3
এটি হ'ল গ্রহণযোগ্য উত্তর। যাইহোক, আমি নিশ্চিত যে পূর্ববর্তী সংস্করণগুলিতে গেট-কন্টেন্ট কাজ করেছিল।
ম্যাটটিএসপি

10
@ ম্যাটটিওএসপি Get-Contentকরেছে, তবে এটি 3.0 এর আগেই পায়নি -Raw। তা না হলে এটি লাইনের অ্যারে হিসাবে সঞ্চিত হয়।
jpmc26

এটি একেবারে গ্রহণযোগ্য উত্তর হওয়া উচিত। ডকুমেন্টেশনটি বলছে যে -Rawপ্যারামিটারটি স্থানীয় কোনও কিছুর দ্বারা প্রয়োগ করা হয়নি help
রিচার্ড জাজলে 22

ধন্যবাদ, এখনই এটি একটি দুর্দান্ত সাহায্য ছিল help
ডিআরেন্স

24

পাওয়ারশেল ২.০:

(এখানে বিস্তারিত ব্যাখ্যা দেখুন)

$text = Get-Content $filePath | Out-String

IO.File.ReadAllTextএকটি আপেক্ষিক পাথ দিয়ে আমার জন্য কাজ করে নি, এটা ফাইল জন্য দেখায় %USERPROFILE%\$filePathপরিবর্তে বর্তমান ডিরেক্টরীর (যখন অন্তত PowerShell ISE থেকে চলমান):

$text = [IO.File]::ReadAllText($filePath)

পাওয়ারশেল 3+:

$text = Get-Content $filePath -Raw

আত্মীয়দের পাথ ব্যবহার করতে প্রথমে এটি সমাধান করুন যেমন:[IO.File]::ReadAllText((Resolve-Path $filePath))
মার্চেন

13

আমি যে ফাইলটি পছন্দ করি সেগুলি পড়ার আরও একটি পদ্ধতিকে বিভিন্নভাবে ভেরিয়েবল নোটেশন বা ভেরিয়েবল সিনট্যাক্স হিসাবে উল্লেখ করা হয় এবং ডলারের চিহ্নের আগে কোঁকড়ানো ধনুর্বন্ধনীগুলির মধ্যে কেবল একটি ফাইলস্পেকের সাথে বুদ্ধিটি অন্তর্ভুক্ত থাকে:

$content = ${C:file.txt}

এই স্বরলিপিটি কোনও এল-মান বা একটি আর-মান হিসাবে ব্যবহার করা যেতে পারে ; সুতরাং, আপনি ঠিক সহজেই এই জাতীয় কিছু দিয়ে একটি ফাইল লিখতে পারেন:

 ${D:\path\to\file.txt} = $content

আর একটি সহজ ব্যবহার আপনি হ'ল অস্থায়ী ফাইল ছাড়াই এবং উপ-এক্সপ্রেশন ছাড়াই কোনও জায়গায় জায়গায় কোনও ফাইল পরিবর্তন করতে পারেন, উদাহরণস্বরূপ:

${C:file.txt} = ${C:file.txt} | select -skip 1

আমি প্রাথমিকভাবে এই স্বরলিপি দ্বারা মুগ্ধ হয়েছি কারণ এটি সম্পর্কে কিছু খুঁজে পাওয়া খুব কঠিন ছিল! এমনকি পাওয়ারশেল ২.০ স্পেসিফিকেশনটিতে এটি একবার ব্যবহার করে কেবল একটি লাইন দেখানো উল্লেখ করেছে - তবে কোনও ব্যাখ্যা বা ব্যবহারের বিশদ নেই। পরবর্তী সময়ে আমি পাওয়ারশেল ভেরিয়েবলগুলিতে এই ব্লগ এন্ট্রিটি পেয়েছি যা কিছু ভাল অন্তর্দৃষ্টি দেয়।

এটি ব্যবহারের জন্য একটি চূড়ান্ত নোট: আপনাকে অবশ্যই একটি ড্রাইভের উপাধি ব্যবহার করতে হবে, ${drive:filespec}যেমন আমি উপরের সমস্ত উদাহরণগুলিতে করেছি। ড্রাইভ (উদাহরণস্বরূপ ${file.txt}) ছাড়া এটি কাজ করে না। এই ড্রাইভে ফাইলস্পেকে কোনও বিধিনিষেধ নেই: এটি পরম বা আপেক্ষিক হতে পারে।


আমি ড্রাইভের নামের পরে ব্যাকস্ল্যাশ না রাখলে এটি কাজ করার জন্য আর কখনও পাইনি।
চার্লস অ্যান্ডারসন

@ চারলেস অ্যান্ডারসন: আপনি যে তিনটি উদাহরণ উল্লেখ করছেন তার মধ্যে এটি স্পষ্ট নয় বা সম্ভবত এগুলির সবগুলি ... তবুও, আমি কেবল নিশ্চিত করেছি যে তিনটি পাওয়ারশেল ভি 3-তে একটি আপেক্ষিক পথ (অর্থাত্ ব্যাকস্ল্যাশ) নিয়ে কাজ করে না। তদ্ব্যতীত, আমার উত্তর দেওয়ার সময় আমি ভি 2 ব্যবহার করছিলাম, সুতরাং সম্ভবত আপনার পরিবেশে কোনও সমস্যা দেখা দিয়েছে।
মাইকেল সোরেন্স

আমি বোঝাতে চেয়েছিলাম {{C: file.txt examples এর মতো উদাহরণ, যা আমাকে $ {C: \ file.txt as হিসাবে লিখতে হবে} হ্যাঁ, আমি ধারণা করি এটি আমার পরিবেশ সম্পর্কে কিছু তবে আমি কী জানি না।
চার্লস অ্যান্ডারসন

এল-মান হিসাবে ব্যবহার করার সময় এটি সিস্টেমের ডিফল্ট এনকোডিং ব্যবহার করে। আমি কোনও প্রভাব ছাড়াই $ আউটপুট এঙ্কোডিং সেট করার চেষ্টা করেছি। আর-মান হিসাবে ব্যবহার করার সময় এটি একটি স্ট্রিং [] অ্যারে তৈরি করে।
রবার্ট 4

দেখে মনে হচ্ছে আপনি কেবল একটি আক্ষরিক পথের নাম ব্যবহার করতে পারেন; আপনি এর ভিতরে কোনও ভেরিয়েবল বা যোগ-পাথের মত প্রকাশের মতো কিছু ব্যবহার করতে পারবেন না। যা বিরক্তিকর, কারণ কনভার্টটো-জসনের মাধ্যমে যখন পাইপ করা হয়েছিল, তখন গেট-কনটেন্টের সাথে তুলনা করার একটি বিশ্ব রয়েছে (এবং {{...} ফলাফল যা আমি প্রত্যাশা করছিলাম। আমি নিশ্চিত নই যে এটি একই কিনা) গেট-কনটেন্ট হিসাবে | আউট স্ট্রিং যদিও
ক্যামেরন কের

2

গেট-কনটেন্ট ডেটা ধরে এবং এটিকে অ্যারেতে ফেলে রেখেছে, রেখায় করে রেখেছে। ধরে নিই যে আপনার তালিকাভুক্ত করা ছাড়া অন্য কোনও বিশেষ প্রয়োজনীয়তা নেই, আপনি কেবল আপনার বিষয়বস্তুকে একটি পরিবর্তনশীল হিসাবে সংরক্ষণ করতে পারবেন?

$file = Get-Content c:\file\whatever.txt

সবে চালানো $fileপুরো বিষয়বস্তু ফিরে আসবে। তারপরে আপনি কেবলমাত্র করতে পারেন $file.Count(কারণ অ্যারেতে ইতিমধ্যে একটি গণনা পদ্ধতি অন্তর্নির্মিত রয়েছে) মোট # লাইন পেতে।

আশাকরি এটা সাহায্য করবে! আমি কোনও স্ক্রিপ্টিং উইজ নই, তবে উপরের স্টাফের চেয়ে এটি আমার কাছে সহজ মনে হয়েছিল।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.