Windowsのポチポチ業務を爆速化するPowerShell、ForEach-Objectで配列の全要素を処理する方法


Windowsのポチポチ業務(マウスを使った業務)を爆速化するために、PowerShellを使った効率化の方法をお伝えしています。

前回の記事はこちらです。

Windowsのポチポチ業務を爆速化するPowerShell、if文を使いフォルダの有無で処理を分岐させる方法
Windowsのポチポチ業務(=マウスを使った業務)を爆速化できるPowerShell。if文を使ってフォルダの有無など状況に応じて処理を分岐させる方法をご紹介します!

前回はif文を使ってディレクトリ(フォルダ)の有無によって、処理を分岐させる方法をお伝えしました。

だいぶスクリプトらしくなってきましたね!

今回はForEach-Objectで繰り返し処理をする方法をお伝えします。変数・配列についても知る必要がありますので、順番に説明していきます。

それではいっていましょう!

PowerShellで変数を使う

変数とは

変数とは値を一時的に保存できる箱のようなものです。

例えば、コマンドレットを使い「ファイルの数」を取得したとします。

スクリプトの中で「ファイルの数」を使用するたびに、コマンドレットで取得するのは面倒ですよね。

そこで変数の出番です。

「ファイルの数」を一度変数に代入してしまえば、再度取得することなく「ファイルの数」を何度も使用することができます

さらに変数には名前をつけることができます。

ファイル数であれば「file-number」などわかりやすい名称をつけることで、スクリプトが読みやすくなります

PowerShellでの変数の使い方

変数には「$」マークを使用します。変数に値を代入するには代入演算子「=」を使用します。文字列も代入できますが、その場合は文字列をシングルクォーテーション「’」で囲ってください。

$変数名 = 数値

または

$変数名 = ‘文字列’

変数を使うときは、スクリプトの中で変数名を直接記載すればOKです。

PowerShellでは変数の名前に英数字も日本語も使用可能です。ただし、PowerShellでは大文字と小文字の区別はありません。$aaaと$AAAは同じ変数として認識されてしまうので注意してください。

実際にPowerShellで変数を使ってみましょう!変数「$file_number」に数値5を代入し、コマンドレットWrite-Hostでコンソールに表示します。

以下のスクリプトをISEで入力し実行してください。

実行すると…

このように$file-numberに代入した数値5が表示されました。

PowerShellで配列を使う

配列とは

配列とは同じ型の変数をまとめて使えるようにしたものです。

型とは数値、文字列など変数の種類のことと思ってください。

例えばある部署にいる5名の名前を変数に代入したい時

$name1 = ‘加藤’
$name2 = ‘吉田’
$name3 = ‘佐藤’
$name4 = ‘田中’
$name5 = ‘本田’

と5つ変数を用意するのは面倒ですよね。

配列を使えば上図のように複数の変数をまとまった1つのデータとして管理することができます

PowerShellでの配列の使い方

配列の定義は変数と同じく「$」を使いますが、代入方法が異なります。

$配列名 = @(要素1,要素2,…,要素n)

@()内に要素を書きます。各要素は「,」で区切ってください。

配列には0から始まるインデックスと呼ばれる数字が付与されています。インデックスを指定することで対応する要素を取り出すことができます

インデックスは変数名の後ろの[]内で指定します。

$配列名[インデックス]

実際にPowerShellで配列を使ってみましょう!以下のスクリプトをISEで入力して実行してみてください。

実行すると…

このようにすべての要素が表示されました。

ForEach-Objectで繰り返し処理をする

さて、いよいよ繰り返し処理ができるコマンドレット:ForEach-Objectについて説明いたします。

配列で書いてもらったスクリプトをもう一度ご覧ください。

同じような処理を何度も書くのって面倒くさいですよね。ForEach-Objectを使えば、配列の全要素に同じ処理を実施する処理を簡潔に書くことができます

上図のように配列をまるごと引き渡すだけで、一つ一つの要素の指定はForEach-Objectが自動でやってくれます。

ForEach-Objectの具体的な使い方を説明したします。一番単純な例を示します。

$配列名 | ForEach-Object{ コマンドレット $_ }

「|」はパイプといいます。パイプを使うことでForEach-Objectに配列を引き渡すことができます。(パイプで配列を引き渡すパイプラインという仕組みについては次回の記事で詳しく説明します。)

「処理」の中で配列の要素を指定するには自動変数「$_」を使います。「$」ドルマークと、「_」アンダーバーで構成されています。

自動変数には文字通り自動で配列の要素が順番に代入され、処理が実施されます。

以下のスクリプトをISEで書いて実行してみましょう!

実行すると…

このようにたった1行の記載で配列の全要素を表示することができました。

まとめ

いかがだったでしょうか。

変数は数値や文字列を一時的に保存する箱のようなもので、配列は変数をまとめて管理し、インデックスで呼び出せる仕組みです。

ForEach-Objectを使うと配列の全要素に対して処理をするスクリプトをシンプルに記載することができます

次回は配列をコマンドレットに引き渡すパイプラインという仕組みについて詳しく説明していきますよ!

最後までお読みいただきありがとうございました!

連載目次:Windowsのポチポチ業務を爆速化するPowerShell

Windowsのポチポチ業務(マウスを使った業務)を爆速化するために、PowerShellを使った効率化の方法をお伝えしています。
  1. Windowsのポチポチ業務を爆速化するPowerShell、はじめのハードルぐーーんと下げてみます!
  2. Windowsのポチポチ業務を爆速化するPowerShell、キーボードを使わずササっと起動する方法
  3. Windowsのポチポチ操作を爆速化するPowerShellの絶対条件!ディレクトリとその移動をマスターしよう!
  4. Windowsのポチポチ業務を爆速化するPowerShell、コマンドレットを腹の底から理解する!
  5. Windowsのポチポチ業務を爆速化するPowerShell、オンラインヘルプでコマンドレットを使い倒す!
  6. Windowsのポチポチ業務を爆速化するPowerShell、統合開発環境ISEを紹介します!
  7. Windowsのポチポチ業務を爆速化するPowerShell、スクリプトを実行するための準備
  8. Windowsのポチポチ業務を爆速化するPowerShell、フォルダを作るスクリプトの作り方
  9. Windowsのポチポチ業務を爆速化するPowerShell、if文を使いフォルダの有無で処理を分岐させる方法
  10. Windowsのポチポチ業務を爆速化するPowerShell、ForEach-Objectで配列の全要素を処理する方法
  11. Windowsのポチポチ業務を爆速化するPowerShell、パイプラインを使いコマンドレット間で値を引き渡す方法
  12. Windowsのポチポチ業務を爆速化するPowerShell、ファイルを別フォルダにコピーし名称を変更する方法

  投稿者プロフィール

teradoshプログラミングする福祉職
システムエンジニアとして5年勤務した後、高齢者デイサービスで4年間働いた異色の経歴(学生時代は水泳コーチ)。1986年生まれ。大阪府豊中市在住。2女の父。

プログラミングの経験を活かし、福祉現場の業務効率化に情熱を燃やしています!

お気軽にフォローしてくださいね。

コメント