Xフォルダのxlsxだけをコピーしたいということでしょうか?
以下を、試してもらえますか?
FOR /R C:\XYZ %%X IN (*.xlsx) DO (
ECHO "%%X" | find "\X\" >NUL
IF NOT ERRORLEVEL 1 (
COPY "%%X" C:\work
)
)
複数階層のフォルダの中から、同じ名前のフォルダ名の中にあるファイルだけ抜き出して、別フォルダに集めたい。
例えば下記のような階層のフォルダがあったとして、
サブフォルダ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に入ってしまい、要件にあいませんでした。
Xフォルダのxlsxだけをコピーしたいということでしょうか?
以下を、試してもらえますか?
FOR /R C:\XYZ %%X IN (*.xlsx) DO (
ECHO "%%X" | find "\X\" >NUL
IF NOT ERRORLEVEL 1 (
COPY "%%X" C:\work
)
)
@HOKKAPOKKA
Questionerありがとうございます。惜しい感じです。
実は、この例でXという名前のフォルダの本当の名前は漢字3文字(提出用)というのですが、バッチに組み込まれて動くときに文字化けしてしまって、結局何もコピーされませんでした。以下のようになってしまいます。
find "\謠仙・逕ィ"
バッチに組み込まれて動くときに文字化けしてしまって
バッチファイルをSJISで保存してみてください。
それでも文字化けする場合は、コマンドプロンプトでコマンドchcp
と打った結果を教えてください。
@HOKKAPOKKA
Questionerすいません、基本を忘れておりました。バッチをANSI形式で保存して実行したらできました!!
引き続き検証してご報告します。
ただ、思ったのですが、これだとフォルダ名ではなく、ファイル名の一部にXが含まれいただけでも拾われることにならないでしょうか?
windowsで見れば¥X¥
にしているので、ファイル名の一部のXには合致しないはずです。
FOR /D
で子ディレクトリをリストアップして処理するのもありですかね。
FOR /D %%D IN (C:\XYZ\*) DO (
COPY %%D\X\*.xlsx C:\work
)
@HOKKAPOKKA
Questionerこちらもやってみます
@HOKKAPOKKA
QuestionerC:\xyz\店舗別(いろいろな店名)\提出用 の下に欲しい.xlsxファイルがあるのですが、この方法だとうまくいきませんでした。
すいません、環境の説明不足だったようです...
@HOKKAPOKKA
Questioner本件、@nak435さんの案で大成功です。ありがとうございました。