Move-Itemの使い方:ファイルやディレクトリを別の場所に移動する

広告

Move-Item コマンドレットを使用すると、指定したファイルやディレクトリを別の場所へ移動できます。移動が行われると、元のファイルやディレクトリは削除されます。ここでは PowerShell における Move-Item コマンドレットの使い方について解説します。

Move-Itemコマンドレットの書式

Move-Item コマンドレットは、指定したファイルやディレクトリを、別の場所に移動できます。 Move-Item コマンドレットの書式は次の通りです。

Move-Item
  [-Path] <String[]>
  [[-Destination] <String>]
  [-Force]
  [-Filter <String>]
  [-Include <String[]>]
  [-Exclude <String[]>]
  [-PassThru]
  [-Credential <PSCredential>]
  [-WhatIf]
  [-Confirm]
  [<CommonParameters>]

Move-Item はエイリアスとして mimovemv が定義されています。

mi -> Move-Item
move -> Move-Item
mv -> Move-Item

ファイルを別のディレクトリに移動するには次の書式を使用します。

Move-Item -Path 移動元のファイルのパス -Destination 移動先のディレクトリのパス

-Path および -Destination は省略可能なので、通常は次のように実行します。

Move-Item 移動元ファイルのパス 移動先ディレクトリのパス

引数は、先に移動元のパス、そのあとに移動先のパスを指定します。

例えばファイルを移動する場合、移動元には移動するファイルのパスを指定し、移動先には移動先のディレクトリのパスを指定します。

それではファイル c:\code\powershell\sample.txtc:\tmp ディレクトリへ移動します。移動元のディレクトリには sample.txt ファイルが含まれています。

Move-Itemコマンドレットの使い方(1)

次のように実行します。

Move-Item c:\code\powershell\sample.txt c:\tmp

画面上には何も表示されません。

Move-Itemコマンドレットの使い方(2)

移動先に指定したディレクトリのファイルの一覧を表示してみます。

Get-ChildItem c:\tmp

Move-Itemコマンドレットの使い方(3)

指定したファイルが移動していることが確認できました。

移動元のディレクトリをあらためて確認してみると、 sample.txt がなくなっており移動したことが確認できます。

Move-Itemコマンドレットの使い方(4)

※ ファイルを移動ではなくコピーしたい場合は Copy-Item コマンドレットを使用します。(詳しい使い方は「Copy-Itemの使い方:ファイルやディレクトリを別の場所にコピーする」を参照してください)。

上書きして移動する

Move-Item を使ってファイルを移動するときに、移動先のディレクトリに同じ名前のファイルが既に存在した場合、既定では上書きされず、移動は行われません。 PowerShell の場合は、更新日時などは関係なく、同じ名前のファイルが既にあった場合は移動を行いません。

例えば次の sample.txt を移動する場合で考えてみます。

PS C:\code\powershell> Get-ChildItem c:\code\powershell\sample.txt

    Directory: C:\code\powershell

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a---          2024/05/31    17:52            122 sample.txt

移動先のディレクトリには既に同じ名前の sample.txt があります。

PS C:\code\powershell> Get-ChildItem c:\tmp

    Directory: C:\tmp

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a---          2026/03/04    11:32            302 sample.txt

Move-Item を使ってファイルを移動します。

Move-Item c:\code\powershell\sample.txt c:\tmp

コマンドを実行すると "Move-Item: 既に存在するファイルを作成することはできません。" というエラーが表示されて、ファイルの移動が失敗しました。

Move-Itemコマンドレットの使い方(5)

このように移動先に同じ名前のファイルが既にある場合は移動は失敗します。

-Forceオプション

-Force オプションを設定すると、移動先に同じ名前のファイルがあっても、上書きして移動を行います。

Move-Item 移動元ファイルのパス 移動先ディレクトリのパス -Force

では実際に試してみます。先ほどと同じ状態で、今度は -Force を付けて移動を行います。

Move-Item c:\code\powershell\sample.txt c:\tmp -Force

上書きで移動する場合も、特に確認などは行われずにすぐに移動が行われます。

Move-Itemコマンドレットの使い方(6)

移動先のファイルを確認します。

Get-ChildItem c:\tmp

Move-Itemコマンドレットの使い方(7)

移動先のディレクトリにあるファイルが、移動元のファイルと同じになっていることが確認できました。

なお -Force を付けて移動を行うと、移動先のディレクトリにある同じ名前のファイルが読み取り専用のファイルだったとしても、上書きで移動が行われます。

-Force を使用すると確認なしで上書きされるため、誤って重要なファイルを上書きしないよう注意してください。

名前を変更して移動する

ファイルを移動すると同時に名前を変更するには、移動先のパス(-Destination オプション)に、ディレクトリではなくファイル名まで含めたパスを指定します。

Move-Item 移動元ファイルのパス 移動先ファイルのパス

例えば、移動先にディレクトリだけを指定した場合は、元のファイル名のまま移動しますが、ファイル名まで指定するとその名前で移動します。

それではファイル c:\code\powershell\sample.txtc:\tmp\backup.txt へ移動します。次のように実行します。

Move-Item c:\code\powershell\sample.txt c:\tmp\backup.txt

Move-Itemコマンドレットの使い方(8)

移動を行ったあとで、移動先のディレクトリを確認してみると、指定した名前でファイルが移動されていることを確認できます。

Get-ChildItem c:\tmp

Move-Itemコマンドレットの使い方(9)

ディレクトリの内容をすべて移動する

単一のファイルではなく、ディレクトリ内にあるファイルやサブディレクトリを移動するには、次のように指定してください。

Move-Item 移動元ディレクトリのパス\* 移動先ディレクトリのパス

移動元ディレクトリの中にサブディレクトリがあり、サブディレクトリ内にさらにファイルやディレクトリがある場合も、すべて移動します。

それでは c:\code\powershell にあるファイルやディレクトリを c:\tmp へ移動します。次のように実行します。

Move-Item c:\code\powershell\* c:\tmp

Move-Itemコマンドレットの使い方(10)

移動後に、移動先のディレクトリを(サブディレクトリも含めて)確認すると、移動元のディレクトリに含まれるファイルやサブディレクトリがすべて移動していることが確認できます。

Get-ChildItem c:\tmp -Recurse

Move-Itemコマンドレットの使い方(11)

なお、 \* を付けずにディレクトリだけを指定して Move-Item を実行すると、指定したディレクトリ自体が移動します。

Move-Item c:\code\powershell\doc c:\tmp

Move-Itemコマンドレットの使い方(12)

移動後に、移動先のディレクトリを(サブディレクトリも含めて)確認すると、移動元のに指定したディレクトリ毎移動しているのが確認できます。

Get-ChildItem c:\tmp -Recurse

Move-Itemコマンドレットの使い方(13)

ただし、移動元のディレクトリを現在使用中(カレントディレクトリになっているなど)の場合は、 "Move-Item: Cannot move item because the item at 'パス名' is in use." というエラーが発生して移動できないことがあります。

条件に一致するファイルやディレクトリを移動する

Move-Item では特定の条件を満たすファイルやディレクトリだけを移動することができます。

-Includeオプション

-Include オプションを使用すると、条件に一致するファイルやディレクトリだけを移動することができます。

Move-Item 移動元ディレクトリのパス\* 移動先ディレクトリのパス -Include パターン

パターンには任意の長さの文字に一致する * と任意の 1 文字とマッチする ? を使用できます。例えば拡張子が .txt のファイルだけを移動したい場合は、パターンに *.txt と指定してください。

Move-Item 移動元ディレクトリのパス\* 移動先ディレクトリのパス -Include *.txt

パターンは複数指定することもできます。複数指定する場合は、カンマ(,)で区切って続けて記述します。複数指定した場合はいずれかのパターンと一致するファイルやディレクトリを移動します。

Move-Item 移動元ディレクトリのパス\* 移動先ディレクトリのパス -Include *.png,*.jpg

それでは実際に試してみます。次のように実行します。指定したディレクトリの中にある、拡張子が *.ps1 のファイルを移動しました。

Move-Item c:\code\powershell\* c:\tmp -Include *.ps1

Move-Itemコマンドレットの使い方(14)

移動を行ったあとで、移動先のディレクトリを確認してみると、移動元ディレクトリ内のファイルのうち、条件に一致するものだけが移動されていることを確認できます。

Get-ChildItem c:\tmp

Move-Itemコマンドレットの使い方(15)

-Filterオプション

-Filter オプションを使用すると、条件に一致するファイルやディレクトリだけを移動することができます。

Move-Item 移動元ディレクトリのパス\* 移動先ディレクトリのパス -Filter パターン

パターンには任意の長さの文字に一致する * と任意の 1 文字とマッチする ? を使用できます。例えば拡張子が .txt のファイルだけを移動したい場合は、パターンに *.txt と指定してください。

Move-Item 移動元ディレクトリのパス\* 移動先ディレクトリのパス -Filter *.txt

-Include と似ていますが、 -Filter はファイルシステム側で絞り込みを行うため、より高速に処理されます。

ただし -Include と異なり、 -Filter ではパターンを複数指定することができません。

それでは実際に試してみます。次のように実行します。指定したディレクトリの中にある、拡張子が *.ps1 のファイルを移動しました。

Move-Item c:\code\powershell\* c:\tmp -Filter *.ps1

Move-Itemコマンドレットの使い方(16)

移動を行ったあとで、移動先のディレクトリを確認してみると、移動元ディレクトリ内のファイルのうち、条件に一致するものだけが移動されていることを確認できます。

Get-ChildItem c:\tmp

Move-Itemコマンドレットの使い方(17)

Move-Item コマンドレットには -Recurse オプションはありません。

-- --

PowerShell における Move-Item コマンドレットの使い方について解説しました。

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。