LoginSignup
HOKKAPOKKA
@HOKKAPOKKA (HOKKA POKKA)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

複数階層のフォルダの中から、同じ名前のフォルダ名の中にあるファイルだけ抜き出して、別フォルダに集めたい

解決したいこと

複数階層のフォルダの中から、同じ名前のフォルダ名の中にあるファイルだけ抜き出して、別フォルダに集めたい。

例えば下記のような階層のフォルダがあったとして、
サブフォルダABCにも、サブフォルダDEFにも、サブフォルダGHIにも、それぞれの下にXという名前のサブフォルダが存在した場合、最終的にC:\WORKにすべてのXフォルダ下にあるすべてのファイルをコピーしたい。
この例だとFile-X1.xlsx , File-X2.xlsx , FILE-X3.xlsx ,File-X4.xlsx , File-X5.xlsx , FILE-X6.xlsx の6個のファイルがc:\workの直下に集まるのがゴールです。
実際にはABCフォルダと同じ階層のフォルダは100個位あって、すべてのフォルダにはXという名前のサブフォルダが必ず存在し、その100個のXサブフォルダにあるファイルはすべて.xlsxファイルですが、入っている数はバラバラです。(0個のケースもあります。)

これを想定してバッチを書くことはできるのでしょうか。

C:\XYZ
└ABC
  └A
   └File-A.xlsx
  └B

   └File-B.xlsx
  └X

   └File-X1.xlsx , File-X2.xlsx , FILE-X3.xlsx
└DEF
  └D

   └File-D.xlsx
  └E

   └File-E.xlsx
  └X

   └File-X4.xlsx , File-X5.xlsx
└GHI
  └G

   └File-G.xlsx
  └H

   └File-H.xlsx
  └X

   └File-X6.xlsx

自分で試したこと

FOR /R C:\XYZ %%X IN (.xlsx) DO (
copy "%%X" C:\work
)
だと、階層を問わずすべての
.xlsx がc:\workに入ってしまい、要件にあいませんでした。

0

2Answer

Xフォルダのxlsxだけをコピーしたいということでしょうか?

以下を、試してもらえますか?

FOR /R C:\XYZ %%X IN (*.xlsx) DO (
    ECHO "%%X" | find "\X\" >NUL
    IF NOT ERRORLEVEL 1 (
        COPY "%%X" C:\work
    )
)
0

Comments

  1. @HOKKAPOKKA

    Questioner

    ありがとうございます。惜しい感じです。
    実は、この例でXという名前のフォルダの本当の名前は漢字3文字(提出用)というのですが、バッチに組み込まれて動くときに文字化けしてしまって、結局何もコピーされませんでした。以下のようになってしまいます。
    find "\謠仙・逕ィ"

  2. バッチに組み込まれて動くときに文字化けしてしまって

    バッチファイルをSJISで保存してみてください。
    それでも文字化けする場合は、コマンドプロンプトでコマンドchcpと打った結果を教えてください。

  3. @HOKKAPOKKA

    Questioner

    すいません、基本を忘れておりました。バッチをANSI形式で保存して実行したらできました!!
    引き続き検証してご報告します。
    ただ、思ったのですが、これだとフォルダ名ではなく、ファイル名の一部にXが含まれいただけでも拾われることにならないでしょうか?

  4. windowsで見れば¥X¥にしているので、ファイル名の一部のXには合致しないはずです。

FOR /Dで子ディレクトリをリストアップして処理するのもありですかね。

FOR /D %%D IN (C:\XYZ\*) DO (
  COPY %%D\X\*.xlsx C:\work
)
0

Comments

  1. @HOKKAPOKKA

    Questioner

    こちらもやってみます

  2. @HOKKAPOKKA

    Questioner

    C:\xyz\店舗別(いろいろな店名)\提出用 の下に欲しい.xlsxファイルがあるのですが、この方法だとうまくいきませんでした。
    すいません、環境の説明不足だったようです...

Your answer might help someone💌