【Cmd】フォルダ階層を保ったままファイルコピー

Cmd

仕事でプログラミングをする時、完全に1から作ることって案外少ないです。
多くの場合、既にあるプログラムをコピーして作っていきます。

今回は特定の名称が含まれるファイル群を、フォルダ階層を保ったままコピーする方法を紹介します。

概要

C:\SENOTE
├─1.00
│  │  X1.txt
│  │  Y1.txt
│  │  Z1.txt
│  │
│  └─subfolder
│          X1-1.txt
│          Y1-1.txt
│          Z1-1.txt
│
└─1.01

↑こうなってるのを

C:\SENOTE
├─1.00
│  │  X1.txt
│  │  Y1.txt
│  │  Z1.txt
│  │
│  └─subfolder
│          X1-1.txt
│          Y1-1.txt
│          Z1-1.txt
│
└─1.01
    │  X1.txt
    │
    └─subfolder
            X1-1.txt

↑こうしたいと思います。(「X1」が含まれるファイルのみをコピー)

動画で見る

YouTubeに動画もアップしているので見てみてください。

コマンドを使ってみよう

コマンドプロンプトを開く

まずは、キーボードの「Windows」キーを押しながら「R」キーを押します。
「ファイル名を指定して実行」が起動するので、「cmd」と入力して「OK」を押します。

ファイルをコピーする

以下の構文(/Sはサブフォルダまでコピー対象とするためのオプション)

robocopy [コピー元フォルダ] [コピー先フォルダ] *[コピー対象のファイル名(一部)]* /S

今回は以下のコマンドになります。

robocopy C:\senote\1.00 C:\senote\1.01 *X1* /S

ついでに1.01フォルダ内の「X1」を「A1」に変更

コピーしたファイル名のまま使うということはあまりないと思うので、ファイル名の一括変更方法についてもついでに紹介します。

以下の構文(pushdは処理対象フォルダへの移動、renがファイル名の変更)

pushd [変更対象フォルダ] & ren [変更前文字]* [変更後文字]*
for /d /r [変更対象フォルダ] %i in (*) do (pushd %i & ren [変更前文字]* [変更後文字]*)

今回は以下のコマンドになります。
1行目で1.01フォルダ直下のファイル、2行目で1.01 フォルダ 内のすべてのサブフォルダ内のファイル名を変更する処理をしています。

pushd C:\senote\1.01 & ren X1* A1*
for /d /r C:\senote\1.01 %i in (*) do (pushd %i & ren X1* A1*)

さいごに

いかがでしたでしょうか。コピー対象のファイル数が多いとなかなか手動でやるのは大変です。
コピーするルールが決まっていれば、今回のようにコマンドプロンプトを使ってみると時短ができるかもしれません。

コメント

タイトルとURLをコピーしました