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 はエイリアスとして mi、 move、 mv が定義されています。
mi -> Move-Item move -> Move-Item mv -> Move-Item
ファイルを別のディレクトリに移動するには次の書式を使用します。
Move-Item -Path 移動元のファイルのパス -Destination 移動先のディレクトリのパス
-Path および -Destination は省略可能なので、通常は次のように実行します。
Move-Item 移動元ファイルのパス 移動先ディレクトリのパス
引数は、先に移動元のパス、そのあとに移動先のパスを指定します。
例えばファイルを移動する場合、移動元には移動するファイルのパスを指定し、移動先には移動先のディレクトリのパスを指定します。
それではファイル c:\code\powershell\sample.txt を c:\tmp ディレクトリへ移動します。移動元のディレクトリには sample.txt ファイルが含まれています。
次のように実行します。
Move-Item c:\code\powershell\sample.txt c:\tmp
画面上には何も表示されません。
移動先に指定したディレクトリのファイルの一覧を表示してみます。
Get-ChildItem c:\tmp
指定したファイルが移動していることが確認できました。
移動元のディレクトリをあらためて確認してみると、 sample.txt がなくなっており移動したことが確認できます。
※ ファイルを移動ではなくコピーしたい場合は 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: 既に存在するファイルを作成することはできません。" というエラーが表示されて、ファイルの移動が失敗しました。
このように移動先に同じ名前のファイルが既にある場合は移動は失敗します。
-Forceオプション
-Force オプションを設定すると、移動先に同じ名前のファイルがあっても、上書きして移動を行います。
Move-Item 移動元ファイルのパス 移動先ディレクトリのパス -Force
では実際に試してみます。先ほどと同じ状態で、今度は -Force を付けて移動を行います。
Move-Item c:\code\powershell\sample.txt c:\tmp -Force
上書きで移動する場合も、特に確認などは行われずにすぐに移動が行われます。
移動先のファイルを確認します。
Get-ChildItem c:\tmp
移動先のディレクトリにあるファイルが、移動元のファイルと同じになっていることが確認できました。
なお -Force を付けて移動を行うと、移動先のディレクトリにある同じ名前のファイルが読み取り専用のファイルだったとしても、上書きで移動が行われます。
※ -Force を使用すると確認なしで上書きされるため、誤って重要なファイルを上書きしないよう注意してください。
名前を変更して移動する
ファイルを移動すると同時に名前を変更するには、移動先のパス(-Destination オプション)に、ディレクトリではなくファイル名まで含めたパスを指定します。
Move-Item 移動元ファイルのパス 移動先ファイルのパス
例えば、移動先にディレクトリだけを指定した場合は、元のファイル名のまま移動しますが、ファイル名まで指定するとその名前で移動します。
それではファイル c:\code\powershell\sample.txt を c:\tmp\backup.txt へ移動します。次のように実行します。
Move-Item c:\code\powershell\sample.txt c:\tmp\backup.txt
移動を行ったあとで、移動先のディレクトリを確認してみると、指定した名前でファイルが移動されていることを確認できます。
Get-ChildItem c:\tmp
ディレクトリの内容をすべて移動する
単一のファイルではなく、ディレクトリ内にあるファイルやサブディレクトリを移動するには、次のように指定してください。
Move-Item 移動元ディレクトリのパス\* 移動先ディレクトリのパス
移動元ディレクトリの中にサブディレクトリがあり、サブディレクトリ内にさらにファイルやディレクトリがある場合も、すべて移動します。
それでは c:\code\powershell にあるファイルやディレクトリを c:\tmp へ移動します。次のように実行します。
Move-Item c:\code\powershell\* c:\tmp
移動後に、移動先のディレクトリを(サブディレクトリも含めて)確認すると、移動元のディレクトリに含まれるファイルやサブディレクトリがすべて移動していることが確認できます。
Get-ChildItem c:\tmp -Recurse
なお、 \* を付けずにディレクトリだけを指定して Move-Item を実行すると、指定したディレクトリ自体が移動します。
Move-Item c:\code\powershell\doc c:\tmp
移動後に、移動先のディレクトリを(サブディレクトリも含めて)確認すると、移動元のに指定したディレクトリ毎移動しているのが確認できます。
Get-ChildItem c:\tmp -Recurse
ただし、移動元のディレクトリを現在使用中(カレントディレクトリになっているなど)の場合は、 "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
移動を行ったあとで、移動先のディレクトリを確認してみると、移動元ディレクトリ内のファイルのうち、条件に一致するものだけが移動されていることを確認できます。
Get-ChildItem c:\tmp
-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
移動を行ったあとで、移動先のディレクトリを確認してみると、移動元ディレクトリ内のファイルのうち、条件に一致するものだけが移動されていることを確認できます。
Get-ChildItem c:\tmp
※ Move-Item コマンドレットには -Recurse オプションはありません。
-- --
PowerShell における Move-Item コマンドレットの使い方について解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。