用于从多个目录复制和重命名文件的批处理文件

Batch file to copy and rename files from multiple directories

我之前曾为我的问题搜索过答案,但到目前为止还没有任何具体的答案。参见:Using xcopy to copy files from several directories to one directory, and Batch file to copy files from one folder to another folder .

在一个目录中 (Data) 我专门命名了多个目录,例如(SIAE02203),其中包含通用命名的 .JPEG 文件 (plot.jpeg)。我希望创建一个能够遍历每个目录的批处理文件,找到、复制并使用父文件夹名称重命名 plot.jpeg 文件。

因此 plot.jpeg 变为 SIAE02203-plot.jpeg

目录结构如下:Data\SIAE02203\plots\plot.jpeg。 我希望将重命名后的文件复制到Data\Output.

这可能吗?

这是此任务的简短批处理代码:

@echo off
pushd "C:\Temp\Data"
if not exist "Output\*" md Output
for /D %%D in (*) do (
    if /I not "%%D" == "Output" (
        for %%J in ("%%D\plots\*.jpeg") do (
            copy /B /Y "%%~fJ" "Output\%%D-%%~nxJ" >nul
        )
    )
)
popd

在第二行指定目录 Data.

的路径

批处理文件首先创建目录 Output(如果尚不存在)。

下一个命令FOR用于处理目录Data的每个子目录上的更多命令。使用 IF 条件跳过子目录 Output

内层FOR搜索外层FOR在子目录plots中找到的每个子目录,如SIAE02203\plots *.jpeg 个文件并将找到的所有 JPEG 文件复制到目录 Output.

命令 COPY 的成功消息被重定向到设备 NUL 以抑制它。

目录 C:\Temp\Data 的输入示例结构:

  • SIAE02203
    • 地块
      • 备份
        • backup_plot.jpeg
      • image.jpg
      • plot.jpeg
    • 图片
      • image.jpg
      • plot.jpeg
    • photo.jpeg
  • TIAE03208
    • 地块
      • another.jpeg
      • ignored.jpg
      • plot.jpeg

批量执行后C:\Temp\Data的内容:

  • 输出

    • SIAE02203-plot.jpeg
    • TIAE03208-another.jpeg
    • TIAE03208-plot.jpeg
  • SIAE02203

    • 地块
      • 备份
        • backup_plot.jpeg
      • image.jpg
      • plot.jpeg
    • 图片
      • image.jpg
      • plot.jpeg
    • photo.jpeg
  • TIAE03208
    • 地块
      • another.jpeg
      • ignored.jpg
      • plot.jpeg

要了解使用的命令及其工作原理,请打开命令提示符 window,在其中执行以下命令,并仔细阅读为每个命令显示的所有帮助页面。

  • copy /?
  • echo /?
  • for /?
  • if /?
  • popd /?
  • pushd /?

另请参阅有关 Using command redirection operators 的 Microsoft 文章,了解对 >nul 的解释。