1

我在许多目录中有许多不同但名称相同的文件。这些目录都位于单个根目录中的一层深处。我想要一个遍历所有这些子目录的脚本,并将同名文件复制到某个目的地。自然地,重命名它们。

4

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 回答