1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

PowerShellでファイル名を変更する

Last updated at Posted at 2021-06-19

概要

PowerShellでファイル名を変更する方法を記載する。
スクリプトで使うというより、ワンライナーでやるときを想定したもの。

補足:
PowerShellのリネームの記事自体はぐぐれば結構あるのですが Get-ChildItem で罠がある事例も掲載している人もいるみたいなので、その辺も含めた備忘録です。

環境

  • OS ... Windows 10
  • PowerShell ... 5.1.19041.1023

テストデータ

> New-Item -Name foo.txt -ItemType File; New-Item -Name bar.txt -ItemType File; New-Item -Name baz.txt -ItemType File
foo.txt
bar.txt
baz.txt

コマンドの例

Get-ChildItem の丸かっこが重要です。
なお、例が横長になるのを避けたかったので、カレントディレクトリに移動する前提の例にしています。(.も省略できるんですが、察してください。)

ファイル名に含まれるキーワードを置換する

foo を foo2 に変更する例

cd "<target-directory>"
(Get-ChildItem -File .) | Rename-Item -NewName {$_ -replace "foo", "foo2"}

ファイルの先頭にprefixを追加する

cd "<target-directory>"
(Get-ChildItem -File .) | Rename-Item -NewName {$_ -replace "^", "prefix-"}

大して変わりませんが、他には次の方法があります。

  • 一度、ディレクトリの一覧を変数に入れる

    cd "<target-directory>"
    $items = Get-ChildItem -File .
    $items | Rename-Item -NewName {$_ -replace "^", "prefix-"}
    
  • ForEach-Object を使う

    cd "<target-directory>"
    (Get-ChildItem -File .) | ForEach-Object { Rename-Item $_ ($_.Name -replace "^", "prefix-")}
    

ファイルの先頭からprefixを削除する

cd "<target-directory>"
(Get-ChildItem -File .) | Rename-Item -NewName {$_ -replace "^prefix-", ""}

NG例: ファイルの先頭にprefixを追加する

Get-ChildItem に丸かっこ付けない場合は、ファイル数が多いと prefix-prefix-prefix-... といった名前になる。
自分のマシンだとファイル数を30から40に変えたら問題が起こった。

cd "<target-directory>"
Get-ChildItem -File . | Rename-Item -NewName { "prefix-" + $_.Name }

参考

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?