0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PowerShellでちょっと複雑なフォルダ階層を作ってみる

Posted at

はじめに

PowerShellの練習がてら、ちょっと複雑なフォルダ階層を作る関数を実装してみました。
現時点ではとりあえずの備忘録です。暇があればもっと汎用的に使えるよう書き直したいところ。

folder
├─fuga
│  ├─No.1
│  ├─No.2
│  └─No.3
├─hoge
│  ├─No.1
│  ├─No.2
│  └─No.3
└─piyo
    ├─No.1
    │  ├─bar
    │  ├─baz
    │  └─foo
    ├─No.2
    │  ├─bar
    │  ├─baz
    │  └─foo
    └─No.3
        ├─bar
        ├─baz
        └─foo

第一階層:folder。一番大きなディレクトリ。
第二階層:hoge/fuga/piyo。ここは固定で作成します。
第三階層:No.1~No.x。キー入力を受け取り、任意の数だけ作成します。
第四階層:foo/bar/baz。piyoディレクトリの下にだけ、さらに深い階層を作成します。

サンプルコード

function makeFolders {
    ("hoge","fuga","piyo") | new-item -path "./folder" -itemtype directory -name {$_} -force
    1..$n | new-item -path "./folder/*" -itemtype directory -name {"No." + $_} -force
    ("foo","bar","baz") | new-item -path "./folder/piyo/*" -itemtype directory -name {$_} -force
}

# キー入力で任意の数字を受けとる
$n = read-host "フォルダを作りたい個数を入力してください"

# フォルダを作る
makeFolders | out-null

# 実行結果を出力
write-host "`n下の通りフォルダを作りました`n"
tree "./folder"

ポイント

function

当たり前すぎてどこにも書いてないレベルですが、関数は使う場所より上に定義する必要があります。
もっとレベルの高い説明は こちら

-force オプション

new-item のオプションに -force を指定しています。
この記述があることにより、既にフォルダがある場所に同名のフォルダを作成した場合に、上書きされる(=エラーにならない)ようになります。
今回の例くらいなら特に気にする必要はありませんが、消えたら困るデータがある場合は注意して使ったほうが良いかも?

out-null

関数の内部にある new-item などを実行するといろいろコンソールに表示されますが、邪魔なので表示しないようにしています。
引数を渡しているわけでもないのに処理を関数に切り出しているのも、この非表示にしたい意図があるためだったりします。

詳しくは こちら

エスケープ文字

多くのプログラミング言語では \(バックスラッシュ)でエスケープすることが多い印象ですが、PowerShellでは ` (バッククオート)を使います。

詳しくは こちら

参考

New-Item
PowerShellでNew-Itemの出力結果を表示させない方法
PowerShellのエスケープシーケンス

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?