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

M. *_*rle -1 xcopy batch-file

我之前曾寻找过我的问题的答案,但到目前为止还没有具体的答案。请参阅:使用 xcopy 将文件从多个目录复制到一个目录批处理文件将文件从一个文件夹复制到另一个文件夹

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

于是就plot.jpeg变成了SIAE02203-plot.jpeg

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

这有可能吗?

Mof*_*ofi 5

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

@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
Run Code Online (Sandbox Code Playgroud)

在第二行指定目录的路径Data

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

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

内部FOR会像for files一样在子目录中搜索外部FOR找到的每个子目录,并将所有找到的 JPEG 文件复制到目录。plotsSIAE02203\plots*.jpegOutput

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

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

  • SIAE02203
    • 地块
      • 备份
        • 备份图.jpeg
      • 图片.jpg
      • 绘图.jpeg
    • 图片
      • 图片.jpg
      • 绘图.jpeg
    • 照片.jpeg
  • TIAE03208
    • 地块
      • 另一个.jpeg
      • 忽略.jpg
      • 绘图.jpeg

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

  • 输出

    • SIAE02203-plot.jpeg
    • TIAE03208-另一个.jpeg
    • TIAE03208-plot.jpeg
  • SIAE02203

    • 地块
      • 备份
        • 备份图.jpeg
      • 图片.jpg
      • 绘图.jpeg
    • 图片
      • 图片.jpg
      • 绘图.jpeg
    • 照片.jpeg
  • TIAE03208
    • 地块
      • 另一个.jpeg
      • 忽略.jpg
      • 绘图.jpeg

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

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

另请参阅有关使用命令重定向运算符的Microsoft 文章,了解 的说明>nul