複数のディレクトリ:Powershellで「mkdir dir {1..9}」に相当しますか?


11

「nixのコマンドと同等(...またはMKDIR、新項目)PowerShellsで複数のディレクトリを作成するための構文はmdとは何ですかmkdir ch{1..9}すなわち

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

例についてはマニュアルページとget-helpを参照しましたが、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
私はそう思う。しかし、私はPowerShellの専門家ではありません。
デビッドポスティル

1
見た目は問題ありませんが、試してみてください:)
DavidPostill

1
-HA -それを得た:1..9 | % $_{ mv ch$_*.* ch$_ }:^ D
ミスター・ケネディ

1
@ Mr.Kennedyカップルのこと。を実行してgit add、何が返されるかを確認する必要があります$_-foreachの内部は最後のパイプラインアイテムの個々の配列エントリのみであることに注意しcommitてください(つまり、この例のステップは生の数値を取得しないため、ch再度追加することはおそらく間違っています) )。また、あなたの例では、すべての追加が完了した後にのみコミットが実行されます(つまり、最初のコミットがすべてを取得することを意味します...)または、;単一のforeachステップ内で複数のステートメント(で区切られた)を使用することもできます。
ボブ

22

New-Itemパスの配列を取ることができるため、mkdirを複数回呼び出す必要はありません。例えば:

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

@DavidPostillは、彼の答えで概念のほとんどを説明しました。これは、明示的な連結を実行する代わりに、文字列補間を利用します。さらに、の%代わりに省略形が使用されますForEach-Objectが、同じ意味があります。

残念ながら、bashのように文字列を文字列の配列に補間する簡単な方法はないようです。


2
@DavidPostillあなたは私よりもはるかに詳細に説明しました。これはあなたの答えへの補遺かもしれません:P
ボブ

2
@DavidPostillは削除しないでください-あなたの説明は非常に役立ちます
ケネディ氏

3
最大ゴルフバージョン:md(0..9|%{"ch$_"})
ベンN

2
@DavidPostill mdは、mkdirPowerShell関数であるの標準エイリアスです。%は、ボブが言及したように、の標準エイリアスですForEach-Object。二重引用符で囲まれた文字列"ch$_"は変数を補間するため、と同等'ch' + $_です。Get-Commandgcm)を実行してエイリアスを検索できます。
ベンN

1
@ Mr.Kennedyのようなもの:1..9 | %{"ch$_"} | %{git add "$_"; git commit -m "$_"}または1..9 | %{$name = "ch$_"; git add "$name"; git commit -m "$name"}。これらのコメントは少し長くなっていますので、さらに質問がある場合は質問として質問するか、チャットに参加してください。
ボブ

1

覚えやすく、多くの状況に適用できるため、ループバージョンに使用します。それでも複数のコマンドに使用できます。

このbashコマンドに相当するもの:

{1..9}のi DO
ます。mkdir CH $私が
行って

... 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" aptディレクトリーに番号を付けますが、 "for"がわかりません。 ..; do ... done "ループ。
ケネディ氏

ここで使用したforループは、bashシェル(/ bin / sh)用です。このシェルに慣れているので、常にシェルをbashに変更します。psの場合、forループに異なる構文を使用する必要があります(添付リンクss64.com/ps/for.htmlを参照してください)
Osman

1
PowerShell:for($i=1; $i -le 10; $i++){md ch$i}mamunに感謝しますが、私はまだ「Bourne again ...」ではありません;)(C ++についても知りませんが、「$ i-le」(以下の場合)を理解していると思います) "$ I ++"(〜 "I + = 1"?)平均して、コマンドでやっている...
ミスター・ケネディ

1
はい、引数は次のように読み取ることができます(iを1から初期化します。iが1以下の場合、iを1
Osman Mamun

1

現在のディレクトリの下に複数のディレクトリを作成します。

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

上記は、以下の簡略版です。文字列の配列の前にアットマークが含まれ、名前付きパラメーターの使用に注意してください。

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

そして、あなたがずっと行きたいなら、完全なネイティブコマンドは次のようになります:

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

PowerShellコマンドラインを使用するときは、短いバージョンを使用します。

特にPowerShellを初めて使用する人向けのスクリプトを作成する場合、ネイティブコマンド全体を作成する傾向があります。

最適なものを選択してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.