ファイルやフォルダを一つ上のフォルダに移動または、コピーする - コマンド Tips

コマンドを利用してファイルやフォルダを一つ上のフォルダに移動、コピーする方法を紹介します。

概要

ファイルやフォルダを一つ上のフォルダに移動する場合、Windowsのエクスプローラでは、下位のフォルダを開き、ファイルやフォルダをすべて選択し、[切り取り]メニューをクリックし、一つ上のフォルダに戻り[貼り付け]メニューをクリックすることで、ファイルやフォルダを一つ上のフォルダに移動できます。
フォルダの数が少ないうちはこの操作方法で問題ないのですが、フォルダの数が非常に多くなった場合に手間がかかります。この記事では、バッチファイルを利用して、一つ下のフォルダ内のファイルやフォルダをまとめて親フォルダに移動する方法を紹介します。

ファイルを一つ上のフォルダに移動する場合

一つ下のフォルダにあるファイルを親フォルダに移動させる場合は下記のバッチファイルを記述します。バッチファイルの文字コードはShift-JIS または ANSI とします。
ディレクトリに対するforループの詳細はこちらの記事を参照してください。 また、PUSHD, POPDの動作の詳細はこちらの記事を参照してください。
for /d %%i in (*) do (  
    pushd .
    cd %%i
    move * ../
    popd
)
または
for /d %%i in (*) do (  
    pushd %%i
    move * ../
    popd
)

フォルダを一つ上のフォルダに移動する場合

for /d %%i in (*) do (
    pushd .
    cd %%i
    for /d %%k in (*) do ren "%%k" "../%%k"
    popd
) 
または
for /d %%i in (*) do (
    pushd %%i
    for /d %%k in (*) do ren "%%k" "../%%k"
    popd
) 
バッチファイルを実行するとバッチファイルの位置の一つ下のフォルダのファイルをバッチファイルのあるフォルダに移動します。

解説

カレントディレクトリでのディレクトリに対してループ処理を実行します。詳しくはこちらの記事を参照してください。
for /d %%i in (*) do ( 
 ....
)

カレントディレクトリをpushd した後、cdコマンドでカレントディレクトリを変更します。
    pushd .  
    cd %%i  

または、pushd コマンドでカレントディレクトリを変更します。
    pushd %%i  

ファイルを一つ上のフォルダに移動する場合は moveコマンドとワイルドカードを利用してファイルを移動します。
    move * ../

ディレクトリを移動する場合は、ワイルドカードが利用できないため、for ループでフォルダを巡回し、ren コマンドでディレクトリをリネームします。
    for /d %%k in (*) do ren "%%k" "../%%k"

処理後、popd コマンドで元のディレクトリに戻ります。
    popd  

運用上の注意

実際にバッチファイルを実行してファイル操作をする場合は、移動よりコピーのほうが安全性が高いです。 バッチファイルの記述にミスがあり同じファイル名で移動してしまうと、元のファイルを回復できなくなってしまいます。
一つ上のフォルダにファイルをコピーする場合は以下のバッチファイルを利用します。

ファイルを一つ上のフォルダにコピーする場合

for /d %%i in (*) do (  
    pushd .  
    cd %%i  
    copy * ..¥
    popd  
)

フォルダを一つ上のフォルダにコピーする場合

for /d %%i in (*) do (  
    pushd .  
    cd %%i  
    for /d %%k in (*) do xcopy "%%k" "..\%%k\" 
    popd  
) 

また、一つ上のフォルダの指定したディレクトリにコピーする場合は、次のコマンドを利用します。

ファイルを一つ上のフォルダの指定したフォルダ内にコピーする場合

下記のバッチファイルでは、一つ上のフォルダの "extract" フォルダにファイルをコピーします。
for /d %%i in (*) do (  
    pushd .  
    cd %%i  
    copy * ..\extract
    popd  
)

フォルダを一つ上のフォルダの指定したフォルダ内にコピーする場合

下記のバッチファイルでは、一つ上のフォルダの "extract" フォルダにディレクトリをコピーします。
for /d %%i in (*) do (  
    pushd .  
    cd %%i  
    for /d %%k in (*) do xcopy "%%k" "..\extract\%%k\" 
    popd  
) 
注意
バッチファイルの文字コードはShift-JIS または ANSI で記述する必要があります。
著者
iPentec.com の代表。ハードウェア、サーバー投資、管理などを担当。
Office 365やデータベースの記事なども担当。
最終更新日: 2024-05-19
作成日: 2020-11-28
iPentec all rights reserverd.