コマンドを利用してファイルやフォルダを一つ上のフォルダに移動、コピーする方法を紹介します。
ファイルやフォルダを一つ上のフォルダに移動する場合、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
)