2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2022-01-03

仕事でプログラミングをする時、完全に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*)

さいごに

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

元記事

私が運営する以下のblogにも同じ記事を載せています。
https://senote.tokyo/folder-hierarchy-copy

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?