同じフォルダ内にあるファイルの名前を一括で変更する方法はいくつかあり、以下はその一例です。
- PowerShell
- コマンドプロンプト
- バッチスクリプト
- Excel VBA
ここでは、PowerShellとコマンドプロンプトを使用した方法を紹介します。
PowerShellとコマンドプロンプトについて
PowerShellとコマンドプロンプト(Command Prompt)は、Windows環境で使用される2つの異なるコマンドラインツールです。一般的に、新しい開発や管理タスクにおいてはPowerShellが推奨されます。ただし、従来のバッチスクリプトや単純なコマンド実行など、特定の用途ではコマンドプロンプトも有用です。
PowerShellはスクリプト言語として設計されており、豊富なコマンドレットやスクリプト機能を提供しています。高度な制御構造や関数、モジュールのサポートがあり、複雑なスクリプトを簡単に作成できます。
コマンドプロンプトは、古典的なバッチスクリプトやコマンドラインツールの実行に特化しています。スクリプト言語の機能が限定的で、繰り返し処理や条件分岐などの高度な制御構造が制約されています。
ファイル名の一括変更例と事前準備
まず、ファイル名を一括で変更する簡単な例と事前準備の説明です。
ファイル名変更の例
- 変更前:sample1.xlsx
- 変更後:sample_1.xlsx
変更後のファイル名に数字の前にアンダーバー「_]を入れる例です。
変更前
変更後
ファイル名変更の事前準備・フォルダ内のファイル名取得
フォルダ内にある変更前のファイル名は、以下の方法で取得すると簡単。
- PowerShell
- コマンドプロンプト
- Excel VBA
PowerShellでファイル名変更する方法
エクセルを使用してPowerShellのコマンドを作成する方法です。
エクセルを使ってコマンド作成
- A列:コマンドレット→[Rename-Item]の最後に半角の空白を入れる
- B列:変更前のファイル名
- C列:半角の空白
- D列:変更後のファイル名
- E:A列からD列の文字結合
赤枠内を使う
セルE2に入力している関数です。
=CONCAT(A2:D2)
実行
(1)PowerShellを起動し、変更前のファイルを保存しているフォルダへ移動します。
(2)エクセルE列のコマンドをコピーする。
(3)PowerShellに貼り付けます。
(4)フォルダ内を確認します。
コマンドプロンプトでファイル名変更する方法
フォルダ名の一括変更方法と同じです。
エクセルを使ってコマンド作成
「rename」での例で説明します。
以下のようにエクセルでコマンドプロンプトへ貼り付けるデータを作成します。
PowerShellでの作成方法と異なります。
- A列:コマンド→[rename]の最後に半角の空白を入れる
- B列:変更前のファイル名
- C列:変更後のファイル名+ファイル名の前には半角スペースを入れます。
規則性のある変更の場合は、関数を使うと簡単です。セルC1に以下の関数を入力し、セルC3までコピーします。
=CONCAT(" ",LEFT(B1,6),"_",RIGHT(B1,6))
実行
(1)コマンドプロンプトを起動し、変更したいファイルを保存しているフォルダへ移動します。
(2)コマンドをコピーします。
(3)コマンドプロンプトにエクセルでコピーしたデータを貼り付けます。
(4)フォルダ内を確認します。
PowerShellとコマンドプロンプトでのファイル名変更エラー
- 変更しようとしているファイルを開いている
- ファイル名に空白がある
上記のうち、「ファイル名に空白がある」についての補足です。次のような場合、これまで説明した方法では変更できません。
sample 1.xlsx
上記3ファイルをPowerShellで実行後の画像です。
空白のあるファイルは、赤字のエラー説明が表示されます。
A positional parameter cannot be found that accepts argument・・・
ファイル名に空白がある場合は、「"」で囲むと実行できます。
はじめから変更前のファイル名すべてを「"」で囲っておけば実行可能です。
変更前のファイル名に空白がある例で説明しましたが、変更後のファイル名に空白がある場合も同じくエラーになるので、ファイル名すべてを「"」で囲います。
または、ExcelVBAを使用してファイル名変更する方法も可能。
ファイル名に空白を含めるのは、今回のエラー例以外にも問題になることがあります。空白を含むファイル名は使わない方が無難です。