একাধিক ডিরেক্টরি: "mkdir dir {1..9}" এর পাওয়ারশেল সমতুল্য?


11

কি সিনট্যাক্স PowerShells সঙ্গে মো একাধিক ডিরেক্টরি তৈরি করতে (বা mkdir, নিউ আইটেম ...) 'স্নো কমান্ড সমতূল্য mkdir ch{1..9}অর্থাত

~/parent_dir/  
ch1/  
ch2/  
ch3/  
ch4/  
ch5/  
ch6/  
ch7/  
ch8/  
ch9/  

আমি ম্যান পৃষ্ঠাগুলিতে সন্ধান করেছি এবং উদাহরণগুলির জন্য সহায়তা পেয়েছি, তবে পাওয়ারশেলের এমন একটি সহজ কাজ করার জন্য সিনট্যাক্সটি আমি জানি না। ধন্যবাদ.

উত্তর:


16

পাওয়ারশেলের সাহায্যে একাধিক ডিরেক্টরি তৈরি করার সিনট্যাক্সটি কী

নিম্নলিখিত কমান্ডটি ব্যবহার করুন:

0..9 | foreach $_{ New-Item -ItemType directory -Name $("ch" + $_) }

কিভাবে এটা কাজ করে:

উদাহরণ:

> 0..9 | foreach $_{ New-Item -ItemType directory -Name $("ch" + $_) }


    Directory: F:\test


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       25/09/2016     14:57                ch0
d-----       25/09/2016     14:57                ch1
d-----       25/09/2016     14:57                ch2
d-----       25/09/2016     14:57                ch3
d-----       25/09/2016     14:57                ch4
d-----       25/09/2016     14:57                ch5
d-----       25/09/2016     14:57                ch6
d-----       25/09/2016     14:57                ch7
d-----       25/09/2016     14:57                ch8
d-----       25/09/2016     14:57                ch9

3
কিছুই নিম্নলিখিত প্রবেশ কম বাগাড়ম্বরপূর্ণ হল: 1..9 | % $_{ md -name $("ch" + $_) }?
মিঃ কেনেডি

1
আমি তাই মনে করি. তবে আমি কোনও পাওয়ারশেল বিশেষজ্ঞ নই।
ডেভিডপস্টিল

1
এটি দেখতে ঠিক আছে, তবে আমি আপনাকে এটি ব্যবহার করে দেখার পরামর্শ দিচ্ছি :)
ডেভিডপস্টিল

1
এ-এইচএ - এটি পেয়েছে 1..9 | % $_{ mv ch$_*.* ch$_ }:: ^ ডি
মিঃ কেনেডি

1
@ মিস্টার কেনেডি দু'টি জিনিস। আপনার চালনার চেষ্টা করা উচিত git addএবং এটি কী ফিরে আসে তা দেখুন - মনে রাখবেন যে $_পূর্ববর্তী অঞ্চলে কেবল শেষ পাইপলাইনের আইটেমের প্রতিটি স্বতন্ত্র এন্ট্রি (যার অর্থ commitআপনার উদাহরণের পদক্ষেপটি কাঁচা সংখ্যা পাবে না, তাই chআবার যুক্ত করা সম্ভবত ভুল) )। এছাড়াও, আপনার উদাহরণে, সমস্ত সংযোজনগুলি সম্পন্ন হওয়ার পরে কমিটগুলি কেবল (?) চালিত হবে যার অর্থ প্রথম প্রতিশ্রুতিবদ্ধভাবে সমস্ত কিছুই পাওয়া যাবে ... বিকল্পভাবে, আপনি ;একক সামনের পদক্ষেপের মধ্যে একাধিক বিবৃতি (দ্বারা পৃথক ) ব্যবহার করতে পারেন ।
বব

22

আপনাকে একাধিকবার এমকেডির আহ্বান করার দরকার নেই, কারণ New-Itemপথের অ্যারে নিতে পারে। উদাহরণ স্বরূপ:

mkdir $(1..9 | %{"ch$_"})

@ ডেভিডপস্টিল তার উত্তরে বেশিরভাগ ধারণাটি ব্যাখ্যা করেছেন । এটি সুস্পষ্ট বক্তৃতা সঞ্চালনের পরিবর্তে স্ট্রিং ইন্টারপোলেশনের সুবিধাও নেয় । অতিরিক্তভাবে, %শর্টহ্যান্ড পরিবর্তে ব্যবহৃত হয় ForEach-Object, তবে একই অর্থ রয়েছে।

দুর্ভাগ্যক্রমে, ব্যাশের মতো স্ট্রিংকে একটি স্ট্রিংয়ের অ্যারেতে বিভক্ত করার কোনও সহজ উপায় বলে মনে হয় না।


2
@ ডেভিডপস্টিল আপনি আমার চেয়ে অনেক বেশি বিস্তারিত ব্যাখ্যা করেছেন This এটি আপনার উত্তরের সংযোজন হতে পারে: পি
বব

2
@ ডেভিডপস্টিল দয়া করে এটি মুছে ফেলবেন না - আপনার ব্যাখ্যাটি খুব দরকারী
মিঃ কেনেডি

3
সর্বাধিক গল্ফযুক্ত সংস্করণ:md(0..9|%{"ch$_"})
বেন এন

2
@ ডেভিডপস্টিল mdএকটি স্ট্যান্ডার্ড ওরফে mkdirযা পাওয়ারশেল ফাংশন। %যেমন বব উল্লেখ করেছেন, এটি একটি আদর্শ উপন্যাস ForEach-Object। ডাবল-কোটেড স্ট্রিংগুলি ইন্টারপোলেট ভেরিয়েবলগুলি "ch$_"সমান 'ch' + $_। আপনি এটির Get-Command( gcm) চালিয়ে একটি উপনাম সন্ধান করতে পারেন ।
বেন এন

1
@ মিস্টার কেনেডি এমন কিছু: 1..9 | %{"ch$_"} | %{git add "$_"; git commit -m "$_"}বা 1..9 | %{$name = "ch$_"; git add "$name"; git commit -m "$name"}। এই মন্তব্যগুলি এখন কিছুটা দীর্ঘ হচ্ছে, সুতরাং আপনার যদি আরও প্রশ্ন থাকে - দয়া করে তাদেরকে প্রশ্ন হিসাবে জিজ্ঞাসা করুন, বা চ্যাটে পড়তে পারেন।
বব

1

আমি লুপ সংস্করণ ব্যবহার করব কারণ এটি মনে রাখা সহজ এবং অনেক পরিস্থিতিতে প্রয়োগ করা যেতে পারে। এমনকি এটি একাধিক কমান্ডের জন্য ব্যবহার করা যেতে পারে।

এই ব্যাশ কমান্ডের সমতুল্য:

আমার জন্য {1..9}; do
mkdir ch $ আমি
করলাম

... পাওয়ারশেলের ব্যবহারে:

for($i=1;
$i -le 10;
$i++)
{md ch$i}

ম্যাম, আপনি কি পরিষ্কার করে বলতে পারেন - আমি যখন আপনার কোডটি পাওয়ারশেল কমান্ড লাইন থেকে, বা একটি পিএস 1 স্ক্রিপ্ট হিসাবে চালাচ্ছি তখন আমি একটি ত্রুটি পেয়েছি: Missing opening '(' after keyword 'for'.এই কমান্ড: foreach ($i in 1..9) {md ch$i}আমাকে " সিএইচ" অ্যাপটার ডিরেক্টরিগুলি নম্বরযুক্ত করে দেয়, তবে আমি আপনার "জন্য" বুঝতে পারি না। ..; কর ... সম্পন্ন "লুপ
মিস্টার কেনেডি

আমি এখানে ব্যবহৃত লুপটি বাশ শেলের (/ বিন / শ) জন্য। আমি সর্বদা আমার শেলটি ব্যাশে পরিণত করি কারণ আমি এই শেলটিতে অভ্যস্ত। পিএস এর জন্য আপনাকে লুপের জন্য আলাদা সিনট্যাক্স ব্যবহার করতে হবে (দয়া করে সংযুক্ত লিঙ্কটি দেখুন ss64.com/ps/for.html )
ওসমান মামুন

1
পাওয়ারশেল: for($i=1; $i -le 10; $i++){md ch$i}ধন্যবাদ মামুন, তবে আমি এখনও "বোর্ন আবার ...";) নই (তবে আমি সি ++ জানি না, তবে আমার মনে হয় আমি "$ আই-লে" (যদি এর চেয়ে কম বা সমান?)) কী বুঝি এবং "$ i ++" (~ "i + = 1"?) মানে এবং কমান্ডটি করছেন ...
মিস্টার কেনেডি

1
হ্যাঁ, আর্গুমেন্ট সিএ হিসাবে পড়ুন (আমি প্রথম 1 থেকে আরম্ভ করব; যতক্ষণ না আমি 1 এর চেয়ে কম বা সমান; আমি 1 দ্বারা বৃদ্ধি করি) {পুনরাবৃত্তভাবে স্টাফ করুন}
ওসমান মামুন

1

বর্তমান ডিরেক্টরি নীচে একাধিক ডিরেক্টরি তৈরি করুন:

mkdir ('abc','def','jkl') 

উপরেরটি নীচের একটি সংক্ষিপ্ত হাত সংস্করণ। স্ট্রিংগুলির অ্যারের সামনে অন্তর্ভুক্ত থাকা চিহ্নটি এবং নামযুক্ত প্যারামিটারগুলির ব্যবহার লক্ষ্য করুন:

mkdir -Path @('abc','def','jkl')

এবং আপনি যদি পুরো পথে যেতে চান তবে পুরো নেটিভ কমান্ডটি হ'ল:

New-Item -Path @('abc','def','jkl') -ItemType Directory

পাওয়ারশেল কমান্ড-লাইনটি ব্যবহার করার সময় আমি সংক্ষিপ্ত সংস্করণটি ব্যবহার করি।

স্ক্রিপ্ট লেখার সময়, বিশেষত অন্যের জন্য (যারা পাওয়ারশেলের ক্ষেত্রে নতুন হতে পারে), আমি সম্পূর্ণ নেটিভ কমান্ডটি লেখার প্রবণতা রাখি।

আপনার জন্য যা কার্যকর হবে তা চয়ন করুন।

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