【PowerShell】foreachで一気にフォルダを作る

【PowerShell】foreachで一気にフォルダを作る

はじめに

コジマです。

実務では、プロジェクト管理のために同一のフォルダ構成を都度作成する必要があったりします。

都度同様のフォルダを手作業で作成するのももってのほかだし、
同様のフォルダコピーしてから不要なファイルを消すっていうのも微妙で。

まあ自動化できるよね、ってことでやっていきたいと思います。

想定・簡単な仕様

今回は、システムの保守対応の案件ごとにフォルダを作成するという想定で、

C:\work
    - XX_案件名
        - 01_要件
        - 02_見積
        - 03_スケジュール
        - 04_調査資料
        - 05_試験
        - 06_報告資料

というフォルダ構成を作成することにします。
「XX_案件名」は「01_組織の一括変更」としてみます。

PowerShellだとネットワーク越し(\XXX.XXX.XXX.XXX なやつ)
にもコマンド通せるので応用利かせることできます。

実装

実装は以下の通り

###################
# プロジェクトフォルダを作成する
###################

# 初期設定
$ROOT_FOLDER = "C:\work\" 
# プロジェクトフォルダ
# ここでは「01_組織の一括変更」とする
# 案件に応じて適宜修正を行う
$PROJECT_FOLDER = "01_組織の一括変更"

# プロジェクトフォルダの雛形部分
$CHILD_FOLDERS = @(
    "01_要件",
    "02_見積",
    "03_スケジュール",
    "04_調査資料",
    "05_試験",
    "06_報告資料"
    )

# 本処理 
# プロジェクトフォルダの作成
$ROOT_FOLDER = $(Join-Path $ROOT_FOLDER $PROJECT_FOLDER)
New-Item $ROOT_FOLDER -ItemType Directory

# 雛形も作成
foreach($d in $CHILD_FOLDERS){
    $CHILD_FOLDER = $(Join-Path $ROOT_FOLDER $d)
    New-Item $CHILD_FOLDER -ItemType Directory
}

ポイント

New-Item

New-Itemでフォルダを作成します。
-ItemType Directory というオプションをつけることでフォルダの作成ができます。
何もつけないとファイルができます。

Join-Path

Join-Pathでパスを結合します。
Join-Pathについては以前記事を書いています。

参考
【PowerShell】Join-Pathでスマートにパスを連結しよう

foreach

foreachを使用して配列の要素をループできます。
なにかしらプログラミング言語を触った経験のある人にとっては
とても便利に感じると思います。

バッチだとループの仕方が複雑になるので、その扱いが楽になるところは
PowerShellの強みだと思います。

補足

PowerShellを編集するとき、テキストを開くより重たくなるので、
これをテキストで保存して初期値を変えていくか
初期値だけ別ファイルに持たせておくと良いでしょう。

私は自分がちょっとでも仕事楽できればいいモチベーションでいるので
似たものをテキストで保存し、PowerShellにコピペで実行しています。

さいごに

実は全然難しいことやってないんですよね。
観点の持ち方ひとつで普段の仕事を少しだけ楽にできます。

この記事を面白いまたは役に立ったと思ってくれた方は是非私のTwitter(@kojimanotech)を
フォローしてくれたらうれしいです!

以上、コジマでした。


PowerShellカテゴリの最新記事