Powershellで一括置換する方法!ファイル名、フォルダ名、ファイル内文字列を同時に置換!

powershell

ファイル名、フォルダ名、ファイル内文字列を同時に置換したいときはないでしょうか。

例えばhtmlやjsなどのWeb関連ファイルのファイル名の一部を一気に変更したいときなどです。

そんな時PowerShellを使用すると、特定のフォルダ内のファイル名、フォルダ名、およびファイル内の文字列を一括で置換することができ便利です。

今回は

・Powershellでファイル名、フォルダ名、ファイル内文字列を同時に一括置換する方法

についてまとめます!

 

置換対象のフォルダ、ファイルを配置

置換対象とするhtmlファイル、フォルダを任意の場所へ配置し、パスをメモ帳などに控えておきます。

またindex.htmlファイルにはHTMLコードで各htmlへリンクするハイパーリンクを入れておきます。

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>リンク集</title>
</head>
<body>
<h1>リンク集</h1>
<ul>
<li><a href="1aaaa.html">1aaaa.html</a></li>
<li><a href="2aaaa.html">2aaaa.html</a></li>
<li><a href="3aaaa.html">3aaaa.html</a></li>
<li><a href="4aaaa.html">4aaaa.html</a></li>
<li><a href="5aaaa.html">5aaaahtml</a></li>
<li><a href="6aaaa.html">6aaaa.html</a></li>
</ul>
</body>
</html>

 

今回、置換対象となる文字列を”aaaa”とし、
これを”bbbb”に変更していきます。

Powershellコマンドを用意

Powershellコマンドを用意しましょう。
今回使うスクリプトは以下の通りです。

# フォルダのパスを指定
$folderPath = "C:\Path\To\Your\Folder"

# 置換する文字列
$oldText = "aaaa"
$newText = "bbbb"

# 全てのファイルとフォルダを再帰的に取得
$items = Get-ChildItem -Path $folderPath -Recurse | Sort-Object -Property FullName -Descending

foreach ($item in $items) {
    # フォルダまたはファイルの名前を取得して置換
    if ($item.Name -like "*$oldText*") {
        $newItemName = $item.Name -replace $oldText, $newText

        # 新しいパスを作成
        if ($item.PSIsContainer) {
            # フォルダの場合の処理
            $newItemPath = Join-Path -Path $item.Parent.FullName -ChildPath $newItemName
        } else {
            # ファイルの場合の処理
            $newItemPath = Join-Path -Path $item.DirectoryName -ChildPath $newItemName
        }

        # 元のパスと新しいパスが異なる場合のみリネームを実行
        if ($item.FullName -ne $newItemPath) {
            Rename-Item -Path $item.FullName -NewName $newItemName
            $itemPath = $newItemPath  # itemPathを更新
        } else {
            $itemPath = $item.FullName  # 変更なし
        }
    } else {
        $itemPath = $item.FullName  # 変更なし
    }

    # ファイルの場合、HTMLファイル内のテキスト置換を実行
    if (-not $item.PSIsContainer -and $item.Extension -eq ".html") {
        (Get-Content $itemPath) -replace $oldText, $newText | Set-Content $itemPath
    }
}

必要な情報を設定

まず、置換したいフォルダのパス、古い文字列、新しい文字列を指定します。

# フォルダのパスを指定
$folderPath = "C:\Path\To\Your\Folder"

今回、置換対象となる文字列は”aaaa”で、これを”bbbb”に変更しますので
以下のように指定します。

# 置換する文字列
$oldText = "aaaa"
$newText = "bbbb"

ファイル内のテキスト置換を行う対象のファイルは”.html”を持つファイルとなります。
拡張子が異なる場合や追加をしたい場合はこちらを変更してください。

# ファイルの場合、HTMLファイル内のテキスト置換を実行
if (-not $item.PSIsContainer -and $item.Extension -eq ".html") {

注意点

バックアップの作成

このスクリプトを実行する前に、データのバックアップを作成することを強くお勧めします。
置換処理は元に戻せない場合があります。

ファイルの種類に応じた処理

このスクリプトでは、HTMLファイル内の文字列置換のみを行っています。
必要に応じて、他のファイルタイプにも対応するようにスクリプトを変更、拡張してください。

文字エンコーディング

ファイルの文字エンコーディングによっては、Get-Content や Set-Content コマンドで問題が発生することがあります。

Powershellを実行する

設定ができたら、早速Powershellを実行しましょう。

タカヒロ
タカヒロ
Powershellコマンドをスクリプトとして実行したい方はこちらをご参考ください。
powershellでps1を実行する方法!コマンドプロンプト経由実行方法も!

PowerShellの起動

まず、PowerShellを起動します。
PowerShellはWindowsに標準でインストールされており、簡単にアクセスできます。

手順

  1. スタートメニューを開きます。
  2. 検索ボックスに「PowerShell」と入力します。
  3. 「Windows PowerShell」または「PowerShell」をクリックして起動します。

コマンドの入力と実行

PowerShellが起動したら、コマンドを入力して実行します。

コマンドの実行手順

  1. PowerShellのコンソールが開いたら、設定済みコマンドをコピペ(マウス右クリック)します。
  2. コマンドを入力したら、Enterキーを押して実行します。
  3. コマンドの出力や結果がコンソールに表示されます。

 

タカヒロ
タカヒロ
スクリプトの最後に改行を含めコンソールにコピペすると即実行となるので注意してください。

メッセージはつけていないので、エラーが出なければ処理は完了です。

早速各アイテムが置換されているか見てみましょう。

はい!、ファイル名およびフォルダ名が置換されていますね!

そして、index.htmlの中身も見てみましょう。

はい!! htmlコードの中で書かれているリンクの箇所が置換されていますね!

タカヒロ
タカヒロ
このスクリプトを使えば、指定されたフォルダ内のすべてのファイル名、フォルダ名、そしてHTMLファイル内の文字列を一括で置換することができますね!

さいごに

いかがでしょうか。

今回は、

・Powershellでファイル名、フォルダ名、ファイル内文字列を同時に一括置換する方法

についてまとめました。

また、他にも便利な方法がありますので、よろしければご参照頂ければと思います。



この記事の関連キーワード

こちらの記事の関連キーワード一覧です。クリックするとキーワードに関連する記事一覧が閲覧できます。







コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA ImageChange Image