আমি কীভাবে পাওয়ারশেলের দুটি পাঠ্য ফাইলকে সংযুক্ত করতে পারি?


108

আমি catইউনিক্সের কমান্ডের কার্যকারিতাটি প্রতিলিপি করার চেষ্টা করছি ।

আমি সমাধানগুলি এড়াতে চাই যেখানে আমি উভয় ফাইল স্পষ্টভাবে ভেরিয়েবলগুলিতে পড়ি, ভেরিয়েবলগুলি এক সাথে যুক্ত করে এবং তারপরে সংক্ষিপ্ত ভেরিয়েবলটি লিখি।

উত্তর:


170

আপনি সহজভাবে ব্যবহার করতে পারেন cat example1.txt, example2.txt | sc examples.txt। আপনি অবশ্যই এই স্টাইলটি সহ দুটিরও বেশি ফাইলকে অবশ্যই দৃaten় করতে পারেন। এছাড়াও, যদি ফাইলগুলির নাম একইভাবে দেওয়া হয় তবে আপনি ব্যবহার করতে পারেন:

cat example*.txt | sc allexamples.txt

catজন্য একটি alias হয় Get-Content, এবং scজন্য একটি alias হয় Set-Content

দ্রষ্টব্য 1 : পরবর্তী পদ্ধতিটি সম্পর্কে সতর্কতা অবলম্বন করুন - আপনি যদি আউটপুট দেওয়ার চেষ্টা করেন examples.txt(বা প্যাটার্নের সাথে মিলে যায় এমন), পাওয়ারশেল একটি অসীম লুপে যাবে! (আমি কেবল এটি পরীক্ষা করেছি)।

দ্রষ্টব্য 2 : একটি ফাইলের আউটপুটিং >অক্ষর এনকোডিং সংরক্ষণ করে না! এজন্য Set-Content( sc) ব্যবহারের পরামর্শ দেওয়া হচ্ছে।


5
কেবলমাত্র যদি কেউ গেট-চাইল্ড আইটেমস দিয়ে ফাইলগুলির মাধ্যমে পুনরাবৃত্তি করতে চায় ফরচ-অবজেক্ট কনস্ট্রাক্ট আপনি সেট-কন্টেন্টের পরিবর্তে অ্যাড-কনটেন্ট ব্যবহার করতে চাইতে পারেন। অন্যথায় প্রতিটি ফাইলটিতে লক্ষ্য ফাইলটি ওভাররাইট করা হয়।
জোনাস

1
নোট করুন যে ডিফল্টরূপে Set-Contentজাতীয় কোড পৃষ্ঠা ব্যবহার করা হয় (উদাহরণস্বরূপ ইংরাজির জন্য উইন্ডোজ -১২২২) যদি উত্স ফাইলগুলিতে অন্য কোডিং থাকে (যেমন উইন্ডোজ -১৫১১ বা ইউটিএফ ৮), আপনার অবশ্যই সঠিক এনকোডিং সেট করতে হবে sc file.txt -Encoding UTF8(যেমন রাশিয়ার জন্য 1251 নম্বরগুলি v6.2-এর পরে সমর্থিত)
রাডেক পেচ

@ জোনাসের সমস্যাটি Add-Contentহ'ল আপনি যদি কমান্ডটি দু'বার চালনা করেন তবে একত্রিত ফাইল দ্বিগুণ হয়ে যায়। একটি ভাল প্রতিস্থাপন হয় Out-Fileএখানে
ড্যান ফ্রেডম্যান

1
ফাইলগুলি বাইনারি হলে কাজ করে বলে মনে হচ্ছে না (উদাহরণস্বরূপ, আমার ক্ষেত্রে একটি জিপফাইলের অংশ)।
ড্যানিয়েল লিডস্ট্রোম

1
@ ড্যানিয়েললিস্ট্রোম এটি সঠিক পরামিতিগুলির সাথে বাইনারিগুলির জন্যও কাজ করে: টাইমস্ট্যাম্পগুলি বাদে Get-Content my.bin -Raw | Set-Content my.bin -NoNewlineকোনও পরিবর্তন হবে না my.bin-Rawযে কোনও সিআর / এলএফ বাইট সংরক্ষণ করে, যখন -NoNewlineপাওয়ারশেলকে তার নিজস্ব সিআর / এলএফ বাইট যুক্ত করতে বাধা দেয়।
টমাস

62

ব্যবহার করবেন না >; এটি চরিত্রের এনকোডিংটিকে বিভ্রান্ত করে। ব্যবহার করুন:

Get-Content files.* | Set-Content newfile.file

catজন্য একটি উপনাম Get-Content
n0rd

5
@ n0rd আমি মনে করি এটি "পরিবর্তে পাইপলাইন ব্যবহার করুন" জিনিসটির চেয়ে বেশি ছিল।
ksoo

নিশ্চিত করতে পারেন. পেয়ে ছিল ÿþযা FF FEআমার যোগসূত্র ফাইলের শুরুতে যখন ব্যবহার >
gpresland

16

ইন cmd, আপনি এটি করতে পারেন:

copy one.txt+two.txt+three.txt four.txt

পাওয়ারশেলের মধ্যে এটি হবে:

cmd /c copy one.txt+two.txt+three.txt four.txt

পাওয়ারশেল উপায়ে জিসি ব্যবহার করা হবে, উপরেরটি খুব দ্রুত হবে, বিশেষত বড় ফাইলগুলির জন্য। এবং এটি অ- এসকিআইআই ফাইলগুলিতেও /Bস্যুইচটি ব্যবহার করে ব্যবহার করা যেতে পারে।


3
আমার জন্য বিড়াল কমান্ডটি সেন্টিমিডি / সি কমান্ডের চেয়ে বেশি দৈর্ঘ্যের একাধিক আদেশ চালায় (যা সত্যই দ্রুত চলে); বিকল্পটি নির্দেশ করার জন্য ধন্যবাদ!
রব

এটি সেরা উত্তর।
নিকোলাস ডিপিয়াজ্জা

12

আপনি অ্যাড-কন্টেন্ট সেমিডলেট ব্যবহার করতে পারেন । সম্ভবত এটি অন্যান্য সমাধানগুলির তুলনায় কিছুটা দ্রুত।

gc .\file2.txt| Add-Content -Path .\file1.txt


gcগেট-কনটেন্ট
এমএম এর

8

কমান্ড প্রম্পটে ফাইলগুলি সংহত করার জন্য এটি হবে

type file1.txt file2.txt file3.txt > files.txt

পাওয়ারশেল typeকমান্ডকে রূপান্তরিত করে Get-Contentযার অর্থ typeপাওয়ারশেলের কমান্ডটি ব্যবহার করার সময় আপনি একটি ত্রুটি পাবেন কারণ Get-Contentকমান্ডটি ফাইলগুলি পৃথক করার জন্য একটি কমা প্রয়োজন। পাওয়ারশেলের একই কমান্ড হবে

Get-Content file1.txt,file2.txt,file3.txt | Set-Content files.txt

5

আপনার যদি নির্দিষ্ট প্যারামিটার দিয়ে ফাইলগুলি অর্ডার করতে হয় (যেমন তারিখের সময়):

gci *.log | sort LastWriteTime | % {$(Get-Content $_)} | Set-Content result.log

3

আমি ব্যবহার করতাম:

Get-Content c:\FileToAppend_*.log | Out-File -FilePath C:\DestinationFile.log 
-Encoding ASCII -Append

এটা জরিমানা। আমি নোটপ্যাড ++ স্পষ্টভাবে এনকোডিং ছাড়াই নুল অক্ষরগুলি অপসারণ করতে ASCII এনকোডিং যুক্ত করেছি।


2

আপনি যেমন কিছু করতে পারেন:

get-content input_file1 > output_file
get-content input_file2 >> output_file

>"আউট-ফাইল" এর জন্য একটি এলিফ কোথায় এবং >> "আউট-ফাইল-অ্যাপেন্ড" এর একটি নাম alias


2

যেহেতু অন্যান্য উত্তরগুলির বেশিরভাগগুলি প্রায়শই ফর্ম্যাটিংটি ভুল (পাইপিংয়ের কারণে) পায় তাই সবচেয়ে নিরাপদ কাজটি নিম্নরূপ:

add-content $YourMasterFile -value (get-content $SomeAdditionalFile)

আমি জানি যে আপনি $ সামাআডিশনালফিলের সামগ্রীটি একটি পরিবর্তনশীল হিসাবে পড়া এড়াতে চেয়েছিলেন, তবে উদাহরণস্বরূপ আপনার নিউলাইন বিন্যাসটি সংরক্ষণ করার জন্য আমি মনে করি না এটি করার উপযুক্ত উপায় নেই।

একটি workaround আপনার $ আপনারমাস্টার ফাইলে লাইন এবং পাইপ দ্বারা আপনার $ SomeAdditionalFile লাইন মাধ্যমে লুপ করা হবে। তবে এটি অত্যধিক সংস্থান নিবিড়।


1

এনকোডিং এবং লাইন শেষ রাখতে:

Get-Content files.* -Raw | Set-Content newfile.file -NoNewline

দ্রষ্টব্য: AFAIR, যার প্যারামিটারগুলি পুরানো পাওয়ারশেলগুলি সমর্থন করে না (<3? <4?)


0

আমি মনে করি "পাওয়ারশেল ওয়ে" হতে পারে:

set-content destination.log -value (get-content c:\FileToAppend_*.log )
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.