एकाधिक निर्देशिका: "मकिर दिर {1..9}" के बराबर शक्तियां?


11

क्या वाक्य रचना PowerShells साथ एमडी एकाधिक निर्देशिका बनाने के लिए (या mkdir, न्यू-मद ...) 'nix आदेश के बराबर है mkdir ch{1..9}यानी

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

मैंने मैन पेजों में देखा है और उदाहरणों के लिए सहायता प्राप्त करता हूं, लेकिन मुझे ऐसा सरल काम करने के लिए PowerShell के लिए सिंटैक्स नहीं पता है। धन्यवाद।

जवाबों:


16

PowerShell के साथ कई निर्देशिकाएं बनाने के लिए सिंटैक्स क्या है

निम्न आदेश का उपयोग करें:

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
मुझे ऐसा लगता है। लेकिन मैं कोई पॉवरशेल विशेषज्ञ नहीं हूं।
DavidPostill

1
यह ठीक लग रहा है, लेकिन मैं सुझाव है कि आप यह कोशिश करते हैं और देखते हैं :)
DavidPostill

1
ए-हा - मिल गया 1..9 | % $_{ mv ch$_*.* ch$_ }: ^ D
मिस्टर केनेडी

1
@ Mr.Kennedy युगल बातें। आपको दौड़ने की कोशिश करनी चाहिए git addऔर यह देखना चाहिए कि यह क्या रिटर्न देता है - ध्यान रखें कि $_एक फ़ॉर्च के अंदर अंतिम पाइपलाइन आइटम की प्रत्येक व्यक्तिगत सरणी प्रविष्टि है (जिसका अर्थ है कि commitआपके उदाहरण में कदम को कच्चे नंबर नहीं मिलेंगे, इसलिए chफिर से जोड़ना शायद गलत है )। इसके अलावा, आपके उदाहरण में, सभी जोड़े जाने के बाद ही कमिट (?) चलेगा, जिसका अर्थ है कि पहले कमिट में सब कुछ मिलेगा ... वैकल्पिक रूप से, आप ;एक ही फ़ॉर्वर्ड स्टेप के अंदर कई स्टेटमेंट (अलग-अलग ) का उपयोग कर सकते हैं ।
बॉब

22

आपको कई बार mkdir को लागू करने की आवश्यकता नहीं है, क्योंकि New-Itemपथ की एक सरणी ले सकते हैं। उदाहरण के लिए:

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

@DavidPostill ने अपने उत्तर में अधिकांश अवधारणाओं को समझाया है । यह एक स्पष्ट संघनन करने के बजाय स्ट्रिंग प्रक्षेप का लाभ भी उठाता है । इसके अतिरिक्त, %आशुलिपि के बजाय प्रयोग किया जाता है ForEach-Object, लेकिन इसका एक ही अर्थ है।

दुर्भाग्य से, वहाँ एक आसान तरीका नहीं है के रूप में स्ट्रिंग में सरणी में एक स्ट्रिंग प्रक्षेपित करने के लिए।


2
@DavidPostill आपने I. से कहीं अधिक विस्तार से समझाया है। यह आपके उत्तर के लिए एक परिशिष्ट से अधिक हो सकता है: P
Bob

2
@DavidPostill कृपया इसे हटाएं नहीं - आपका स्पष्टीकरण बहुत उपयोगी है
श्री कैनेडी

3
मैक्सिमली गोल्फ का संस्करण:md(0..9|%{"ch$_"})
बेन एन

2
@DavidPostill mdएक मानक उर्फ ​​है mkdir, जो एक PowerShell फ़ंक्शन है। %, जैसा कि बॉब ने उल्लेख किया है, के लिए एक मानक उपनाम है ForEach-Object। डबल-उद्धृत स्ट्रिंग्स अंतरशील चरों को बदलते हैं, इसलिए "ch$_"इसके बराबर है 'ch' + $_। आप उस पर Get-Command( gcm) चल कर एक उपनाम देख सकते हैं ।
बेन एन

1
@ Mr.Kennedy कुछ इस तरह: 1..9 | %{"ch$_"} | %{git add "$_"; git commit -m "$_"}या 1..9 | %{$name = "ch$_"; git add "$name"; git commit -m "$name"}। ये टिप्पणियां अब थोड़ी लंबी हो रही हैं, इसलिए यदि आपके पास और प्रश्न हैं - तो कृपया उन्हें प्रश्न के रूप में पूछें, या शायद चैट में छोड़ दें।
बॉब

1

मैं लूप संस्करण के लिए उपयोग करूंगा क्योंकि यह याद रखना आसान है और इसे कई स्थितियों में लागू किया जा सकता है। यहां तक ​​कि इसका उपयोग कई कमांड के लिए किया जा सकता है।

इस बैश कमांड के बराबर के लिए:

i में {1..9} के लिए; ऐसा
mkdir ch $ i
किया

... PowerShell उपयोग में:

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

mamum, क्या आप स्पष्ट कर सकते हैं - मुझे एक त्रुटि मिलती है जब मैं आपके कोड को PowerShell कमांड लाइन से चलाता हूं, या, एक ps1 स्क्रिप्ट के रूप में: Missing opening '(' after keyword 'for'.यह आदेश: foreach ($i in 1..9) {md ch$i}मुझे "ch" एप्टर निर्देशिकाओं की संख्या देता है, लेकिन मैं आपके लिए "नहीं समझता"। ..; करो ... किया "पाश।
श्री केनेडी

लूप के लिए जो मैंने यहां इस्तेमाल किया है वह बैश शेल (/ बिन / श) के लिए है। मैं हमेशा अपने शेल को बैश करने के लिए बदलता हूं क्योंकि मैं इस शेल के लिए उपयोग किया जाता हूं। पीएस के लिए, आपको लूप के लिए अलग-अलग सिंटैक्स का उपयोग करना होगा (कृपया संलग्न लिंक ss64.com/ps/for.html देखें )
उस्मान

1
PowerShell: for($i=1; $i -le 10; $i++){md ch$i}धन्यवाद मैमुन, लेकिन मैं अभी तक "बॉर्न फिर से ..." नहीं हूं;) (और न ही मैं सी ++ जानता हूं, लेकिन मुझे लगता है कि मुझे लगता है कि मुझे समझ में आया कि "$ i-le" (यदि कम या इसके बराबर?)। "$ i ++" (~ "i + = 1"?) का अर्थ है और कमांड में कर रहे हैं ...
श्री केनेडी

1
हां, तर्क सीए के रूप में पढ़ा जा सकता है (मुझे 1 से प्रारंभ करें; जब तक मैं 1 से कम या बराबर हो, 1 से बढ़ा दूं) {do it it itatively}
Osman Mamun

1

वर्तमान निर्देशिका के नीचे कई निर्देशिकाएँ बनाएँ:

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

ऊपर निम्नलिखित में से एक लघु-हस्त संस्करण है। स्ट्रिंग के सरणी और नामित मापदंडों के उपयोग में शामिल एट-साइन पर ध्यान दें:

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

और अगर आप सभी तरह से जाना चाहते हैं, तो पूरा देशी कमांड होगा:

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

PowerShell कमांड-लाइन का उपयोग करते समय, मैं लघु संस्करण का उपयोग करता हूं।

स्क्रिप्ट लिखते समय, विशेष रूप से दूसरों के लिए एक (जो पॉवरशेल के लिए नया हो सकता है), मैं पूर्ण देशी कमांड लिखना चाहता हूं।

आपके लिए जो भी सबसे अच्छा काम करता है उसे चुनें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.