みなさんこんにちは、テラド(@terashin1226)です!
Windowsのポチポチ業務(マウスを使った業務)を爆速化するために、PowerShellを使った効率化の方法をお伝えしています。
前回は複数のファイルを別ディレクトリにコピーし、名称を変更するスクリプトを作成しました。
今回はPowerShellでファイル名を変更する方法をご紹介します。
それではいってみましょう!
ファイルの名称を変更する
ファイル名を変更するにはコマンドレットRename-Itemを使用します。
基本的な構文は以下の通りです。
デスクトップのinputディレクトリにあるファイルの名称変更をするスクリプトは以下のようになります。
Rename-Item -Path 'C:\Users\terad\Desktop\input\いつも隣に.txt' -NewName 'ITのお仕事.txt'
Pathパラメータにはディレクトリを含むフルパスを指定します。NewNameパラメータはファイル名だけ指定でOKです。
「いつも隣に.txt」というファイルがあります。
スクリプトをISEで実行すると…
このようにファイル名が変更されました。
複数ファイルの名称を変更する
オフィスの現場では1ファイルだけの名称変更するより、複数ファイルを変更するほうが多いと思います。
複数ファイルの名称を変更する場合はGet-ChildItemと組み合わせます。
{}内でReplace演算子を使うことで元のファイル名を置換した文字列を、新しいファイル名として指定することができます。
NewNameパラメータはForEach-Objectと同様の動きをします。
Get-ChildItemで取得されパイプラインで引き渡された複数のファイルは、自動変数「$_」に格納され順次処理をすることができます。
「$_.Name」の「.Name」はプロパティといい、引き渡されたファイルから名称を取り出すことができます。
パイプライン、ForEach-Objectについてはこの記事を参照してください。
拡張子を「.txt」→「.log」に変更するスクリプトをご紹介します。
Set-Location C:\Users\terad\Desktop\input Get-ChildItem | Rename-Item -NewName {$_.Name -replace '.txt','.log'}
Set-Locationでファイル名を変更したいファイルの入ったディレクトリを、カレントディレクトリにするのを忘れないようにしましょう。
デスクトップのinputディレクトリに拡張子が「.txt」のファイルが複数入っています。
スクリプトをISEで実行すると…
一気に複数ファイルの拡張子が変更されました!
コマンドレット実行前に確認を求めるConfirmパラメータ
ファイル名の変更は一度実行してしまうと元に戻すのに苦労する場合があるので、慎重を期す必要があります。その時に重宝するのがConfirmパラメータです。
Confirmパラメータをつけると、実行前に変更内容を確認することができます。
一番後ろに「-Confirm」をつけるだけでOKです。
Set-Location C:\Users\terad\Desktop\input Get-ChildItem | Rename-Item -NewName {$_.Name -replace '.txt','.log'} -Confirm
スクリプトを実行するとダイアログが表示されます。
「変更先」で正しくファイル名が変更されているのを確認します。
各ボタンのクリック時の動作は以下の通りです。
- 「はい」 処理が実行され、以降も1ファイル毎にダイアログが表示
- 「すべて続行」 ダイアログは表示されず、すべての処理が実行
- 「いいえ」 処理は実行されず、以降も1ファイル毎にダイアログが表示
- 「すべて無視」 処理が実行されず、スクリプトが終了
- 「中断」 スクリプトが中断
中断だけ少し特殊なので説明しておきます。中断するとコンソールの入力値を示す「>」のマーク=プロンプトが1つ増えます。
これは中断しているスクリプトがあることを示します。
コンソールで「exit」というコマンドを入力してEnterを押すと
再びダイアログが表示され、処理が再開します。
変更する前に結果を確認するWhatIfパラメータ
Confirmパラメータと似ているのですが、実行前にファイル変更の内容を一気に確認できるWhatIfパラメータがあります。
一番後ろに「-Whatif」をつけるだけでOKです。
Set-Location C:\Users\terad\Desktop\input Get-ChildItem | Rename-Item -NewName {$_.Name -replace '.txt','.log'} -Whatif
スクリプトを実行するとコンソールに以下のようなメッセージが表示されます。
Confirmパラメータで表示されたダイアログと同じ内容のメッセージが表示されます。
処理は実行されませんので、落ち着いて変更内容を確認することができます。
まとめ
いかがだったでしょうか。
今回はRename-Itemというコマンドレットを使ってファイル名を変更する方法をご紹介しました。
Get-ChildItemと組み合わせると複数ファイルの名称を変更することができます。またConfirmパラメータ、Whatifパラメータを使えば実行前に変更内容を確認することができます。
次回はRename-Itemと正規表現という手法を組み合わせることで、ファイル名により複雑な変更を加える方法をご紹介いたします!
最後までお読みいただきありがとうございました!
連載目次:Windowsのポチポチ業務を爆速化するPowerShell
Windowsのポチポチ業務(マウスを使った業務)を爆速化するために、PowerShellを使った効率化の方法をお伝えしています。- Windowsのポチポチ業務を爆速化するPowerShell、はじめのハードルぐーーんと下げてみます!
- Windowsのポチポチ業務を爆速化するPowerShell、キーボードを使わずササっと起動する方法
- Windowsのポチポチ操作を爆速化するPowerShellの絶対条件!ディレクトリとその移動をマスターしよう!
- Windowsのポチポチ業務を爆速化するPowerShell、コマンドレットを腹の底から理解する!
- Windowsのポチポチ業務を爆速化するPowerShell、オンラインヘルプでコマンドレットを使い倒す!
- Windowsのポチポチ業務を爆速化するPowerShell、統合開発環境ISEを紹介します!
- Windowsのポチポチ業務を爆速化するPowerShell、スクリプトを実行するための準備
- Windowsのポチポチ業務を爆速化するPowerShell、フォルダを作るスクリプトの作り方
- Windowsのポチポチ業務を爆速化するPowerShell、if文を使いフォルダの有無で処理を分岐させる方法
- Windowsのポチポチ業務を爆速化するPowerShell、ForEach-Objectで配列の全要素を処理する方法
- Windowsのポチポチ業務を爆速化するPowerShell、パイプラインを使いコマンドレット間で値を引き渡す方法
- Windowsのポチポチ業務を爆速化するPowerShell、ファイルを別フォルダにコピーし名称を変更する方法
- Windowsのポチポチ業務を爆速化するPowerShell、ファイル名を変更する方法
- Windowsのポチポチ業務を爆速化するPowerShell、正規表現で複雑なファイル名変更をする方法
- Windowsのポチポチ業務を爆速化するPowerShell、タスクスケジューラでスクリプトを決まった日時に起動する方法
- Windowsのポチポチ業務を爆速化するPowerShell、ファイルをバックアップするスクリプトの作り方
- Windowsのポチポチ業務を爆速化するPowerShell、関数を作ってスクリプトから呼び出す方法
- Windowsのポチポチ業務を爆速化するPowerShell、関数をコンソールで登録して呼び出す方法
- Windowsのポチポチ業務を爆速化するPowerShell、短いワードでサッと関数を呼び出すエイリアスの使い方
- Windowsのポチポチ業務を爆速化するPowerShell、関数やエイリアス保存場所のドライブを紹介します
- Windowsのポチポチ業務を爆速化するPowerShell、elseifで日付の元号を判定する方法
- Windowsのポチポチ業務を爆速化するPowerShell、日付を操るDatetime型