使用文件夹名称复制和重命名文件的批处理文件

Posted

技术标签:

【中文标题】使用文件夹名称复制和重命名文件的批处理文件【英文标题】:Batch file to copy and rename files with folder name 【发布时间】:2014-02-02 18:49:23 【问题描述】:

我有一个文件夹,其中包含数百个电影子文件夹,每个子文件夹都包含几部电影和几张 jpg。该文件夹中的每个电影子文件夹和一个 jpg 都被赋予了电影的名称(即文件夹名称:The Matrix 和图像名称:The Matrix.jpgbackdrop.jpgfanart.jpg)。我想为每个与文件夹同名的 jpg 制作一个副本,将这些副本命名为folder.jpg,并将它们放在同一个文件夹中。

我找到了这个脚本,但不知道如何根据我的情况调整它,因为它假设文件夹中只有一个 jpg。

@echo off
for /f "delims=" %%F in ('dir /b /s *.jpg') do Echo COPY "%%~dpnxF" "%%~dpF\folder.jpg"
echo Done
Pause

【问题讨论】:

如果你命名 2 个文件 folder.jpg 并将它们放在同一个文件夹中,最后复制的文件将覆盖现有文件,你需要为每个文件指定一个唯一的名称以便按顺序留住他们。在您的示例中,即使您将硬编码的文件名更改为变量,您也需要想出一种方法来使名称唯一以保留每个文件......也许像 -。不幸的是,我的大脑因工作而被烧毁,所以我无法给出一个实际的工作示例。 换种说法 - 您不能将三个文件放在同名的文件夹中。我们是否误解了您想要做什么? 【参考方案1】:
@echo off
    set "whereToStart=d:\movies"

    for /d /r "%whereToStart%" %%f in (*) do (
        if exist "%%~ff\%%~nxf.jpg" copy /y "%%~ff\%%~nxf.jpg" "%%~ff\folder.jpg" 
    )

对于每个文件夹,如果它包含一个与目录同名的 .jpg 文件,则将该文件复制为同一目录中的 folder.jpg。可以添加额外的检查以避免不需要的副本,检查目标文件的存在

@echo off
    set "whereToStart=d:\movies"

    for /d /r "%whereToStart%" %%f in (*) do (
        if exist "%%~ff\%%~nxf.jpg" if not exist "%%~ff\folder.jpg" (
            copy "%%~ff\%%~nxf.jpg" "%%~ff\folder.jpg" 
        )
    )

【讨论】:

以上是关于使用文件夹名称复制和重命名文件的批处理文件的主要内容,如果未能解决你的问题,请参考以下文章

如何使用环境变量复制和重命名文件?

使用批处理解压缩和重命名文件 (Windows)

批量复制重命名,重复时提示

如何根据子文件夹复制文件和重命名

Windows批处理脚本实现批量复制文件并重命名

按特定条件复制和重命名 - 批量