1

多くのディレクトリに、同じ名前の異なるファイルがたくさんあります。これらのディレクトリはすべて、単一のルートディレクトリ内の1レベルの深さです。これらすべてのサブディレクトリを調べ、同じ名前のファイルをある宛先にコピーするスクリプトが必要です。当然、名前を変更します。

4

1 に答える 1

1

最近、同様の要件があり、それを行うためのスクリプトを書きました。同じ名前のファイルや 1 レベルの深さのディレクトリ構造だけに制限されているわけではありませんが、そのために使用することができ、ニーズに合うと思います。完全なファイル名を取得し、現在のパスのプレフィックスを取り除き、バックスラッシュをアンダースコアに変換して、ディレクトリ構造をファイル名に「フラット化」します。スクリプトが操作するターゲット ディレクトリとファイルマスクを指定するだけです (2 行目と 3 行目)。

@ECHO OFF
SET filemask=*.gif
SET target_path=out
SETLOCAL EnableDelayedExpansion
SET current_path=%CD%\
IF NOT EXIST "%target_path%" MKDIR "%target_path%"
FOR /F "tokens=*" %%G IN ('DIR /B /S %filemask%') DO (
    SET file=%%G
    :: strip current path
    SET file_new=!file:%current_path%=!
    :: convert backslashes to underscores
    SET file_new=!file_new:\=_!
    :: copy file
    COPY %%G %target_path%\!file_new! >nul
)
ENDLOCAL
于 2013-03-08T09:44:15.727 に答える