1行で連番フォルダ作成! PowerShellで自動化

以下の演算子・コマンドレットを使って連番フォルダを作成するコマンドを組み上げます。

  • リスト構成演算子(例 => 1..3):連番のリスト(配列データ)を作成する
  • New-Itemコマンドレット:ファイルもしくはディレクトリを新規作成する
  • ForEach-Objectコマンドレット:繰り返し処理をする

連番フォルダを作成するPowerShellのコマンド

PowerShellを起動して、以下のコマンドをコピペすると連番のフォルダが10個作成できます。

# フォルダその1, フォルダその2, フォルダその3...を作成する
1..10 | % { New-Item -ItemType Directory "フォルダその$_" }

解説

上記コードは次の順で処理が進んでいます。

  1. 【1..10】の配列(データ集合)を作成
  2. 【 |(パイプ演算子)】で左辺の結果を右辺に入力
  3. 左辺から入力された結果(1から10の配列)を【 %(ForEach-Object)】で繰り返し処理する
  4. 繰り返し処理内でフォルダを作成

【1..10】ってなに

1から10までの配列を示します。つまり「1, 2, 3, 4, 5, 6, 7, 8, 9, 10」と並んだ数字のデータ集合ですね。

この「ピリオドふたつ」の演算子は「リスト構成演算子(list constructor operator)」と呼びます。

# 1から99までの配列をつくるなら
1..99

# 昇順だけでなく、降順もできる(10, 9, 8... と続く配列)
10..1

【 %(ForEach-Object)】ってなに

PowerShellで「%」はForEach-Objectという関数の省略記法です。

ForEach-Objectはパイプ演算子の左辺から渡された結果を、【中括弧で囲まれた処理ブロック(スクリプトブロック)】の中の【変数$_】に渡して繰り返し処理を行います。

なので、最初に紹介したコードを分解するとこのような手続きになります。

# 1から10までの配列をつくり、これをパイプ演算子でForEach-Objectに渡す
1..10 | ForEach-Object {
  # スクリプトブロック内の処理が繰り返し処理される.
  # この中で、フォルダを作成する関数(New-Item -ItemType Directory)を実行
  # フォルダ名の文字列中で、パイプ演算子の左辺から渡された配列の中身をひとつひとつ展開していく
  New-Item -ItemType Directory "フォルダその$_"
}

フォルダの番号を『1, 2, 3..』ではなく『01, 02, 03…』に整形したいときはtoString(’00’)を使う

PowerShellではToString()メソッドで数値の整形ができます。

例えば以下のように書くと、『フォルダ_01, フォルダ_02, フォルダ_03….』と数値の2桁目をゼロで埋めた状態でフォルダを作成できます。

1..10 | % { New-Item -ItemType Directory "フォルダ_$($_.toString('00'))" }

これを『フォルダ_001, フォルダ_002, フォルダ_003』と三桁固定にしたい場合は以下の通りです。

1..10 | % { New-Item -ItemType Directory "フォルダ_$($_.toString('000'))" }