PowerShellとは?
PowerShell は、コマンドライン シェル、スクリプト言語、および構成管理フレームワークで構成されるクロスプラットフォームのタスク自動化ソリューションです。
PowerShell は Windows、Linux、および macOS 上で実行されます。(Microsoft公式サイトより引用)
ちょっとどういうことか分かりにくいと思いますので、実行例を交えつつご紹介していきます。
フォルダ内のファイル名を一覧表示
コマンド
Get-ChildItem
実行結果
document.docx
estimate.xlsx
image2.jpg
image.jpg
sample.txt
解説
Get-ChildItem : フォルダ内のファイルをすべて取得
-Name : ファイル名を取得するためのオプション
フォルダ内でファイルを検索
コマンド
Get-ChildItem -Filter "document.docx" -Name
実行結果
document.docx
解説
Get-ChildItem : フォルダ内のファイルをすべて取得
-Filter “document.docx” : document.docxを検索
-Name : ファイル名を取得するためのオプション
補足ですが、このように-Recurseをすると子孫のディレクトリ内を検索することもできます。
Get-ChildItem -Recurse -Filter "document.docx" -Name
テキストファイルの中身を検索
コマンド
Select-String -Path sample.txt -Pattern "Hello, PowerShell!"
実行結果
sample.txt:13:Hello, PowerShell!
解説
Select-String : 文字列を検索
-Path sample.txt : sample.txtファイル内を指定する
-Pattern “Hello, PowerShell!” : 検索する文字列パターン。“Hello, PowerShell!”という文字列を探す
ファイル名を一括変更
少し難易度が上がりますが、実作業で使えそうな内容でご説明します。
フォルダ内のファイル名すべてに_20240601と日時のサフィックスを付けていきます。
コマンド
Get-ChildItem -File | ForEach-Object {
$extension = $_.Extension
$newName = $_.BaseName + "_20240601" + $extension
Rename-Item $_.FullName -NewName $newName
}
実行結果
解説
Get-ChildItem -File:現在のディレクトリにあるすべてのファイルを取得
ForEach-Object:取得した各ファイルに対して{ }内の操作を行います
$extension = $_.Extension:ファイルの拡張子を取得し、それを$extension変数に保存
$newName = $_.BaseName + “_20240601” + $extension :
ファイルの基本名(拡張子を除いた名前)に“_20240601”を追加し、その後に元の拡張子($extension)を追加して新しい名前($newName)を作成
Rename-Item $_.FullName : ファイルのフルパス名($_.FullName)を使用してファイルを指定
-NewName $newName : 新しい名前($newName)に変更する