ファイルやフォルダをひとつ上の階層に一気に移動させたいときのTips


最近、こんなところ*1やこんなところ*2で素材をDLする機会が多い黛(まゆずみ)です。

*1 商用利用無料の音楽がたくさんDLできる
*2 毎週月曜日に有料の素材が無料でいくつかDLできる

ダウンロードしたはいいもののインストールしたり、整理するのを1つ1つするのは手間なのでバッチ処理でなんとか楽する方法はないかと探してみたんですが、こんな情報を見つけました。

おかげで細かい作業が捗っているんですが、この先応用を効かせたいときのために、コードがどうなっているのかを自分なりにまとめておきます。
コードそのものについてはリンク先をご参照ください。

(リンク先にファイルの場合のコードは解説があるので、おもにフォルダの場合のコードと、ファイルとフォルダの違いの部分の解説…というか自分なりの理解のまとめになります)


移動させる対象がファイルの場合は

   move * ../  

つまりすべてのファイルをひとつ上の階層に移動させてるんだけなんですが、フォルダの場合は

 for /d %%k in (*) do ren "%%k" "../%%k"

move を使ってないのでびっくりしました。
でも、バッチ叩いたらちゃんと移動してるし、なんでだろう?と思ったので、このコードがどういう文なのかを調べてみました。


/d

これはフォルダ(ディレクトリ)を対象にするときに使うオプションです。


%%k

これはただの変数です。
コマンドラインだと%kみたいに%は1つですむんですが、
バッチ処理だと%は2つ必要なので%%kとなります。


for /d %%k in (*) do

これはファイル名の一括変換です。


ren "%%k" "../%%k"

これがファイル名の変更(rename)なんですが、
renってファイル名を変更するだけでなく、フォルダ名を変更してなおかつ階層移動もできるんですね。

とはいえ、「このコードの作者はなぜmoveを使わずにrenでフォルダを移動させたんだろう?」「moveじゃダメなの?」「moveだとフォルダ動かない…」と思ってmoveを調べてみたら、moveはフォルダしか使えない…だと…!?

なるほど。
つまりフォルダを移動させたかったらrenで移動すればいいってことですね!

これで今後ファイル整理作業が捗ります。


この記事が気に入ったらサポートをしてみませんか?