批处理文件从多个目录重命名文件名

时间:2017-02-07 23:27:57

标签: batch-file

我有多个* .jpg文件位于主根文件夹中的文件夹中。我正在使用一个简单的批处理文件,将所有文件重命名为foldername。例如:

Orphan
---Gambia
------GAM001
---------G123.jpg
---------G456.jpg
---------GX12.jpg
------GAM002
---------G789.jpg
---------G012.jpg
---------G112.jpg

我希望它看起来像这样:

Orphan
---Gambia
------GAM001
---------GAM001.jpg
---------GAM001 (1).jpg
---------GAM001 (2).jpg
------GAM002
---------GAM002.jpg
---------GAM002 (1).jpg
---------GAM002 (2).jpg

所以我在一个批处理文件之后,我可以从Main Root文件夹运行。

提前抱歉,因为我对这一切都不熟悉,我想我会考虑一下我发现非常有趣的东西!

提前致谢

1 个答案:

答案 0 :(得分:2)

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION 
SET "sourcedir=U:\sourcedir\orphan"
FOR /d /r "%sourcedir%" %%a IN (*) DO (
 PUSHD "%%a"
 FOR /f "delims=" %%f IN (
  'dir /b /a-d /o-n "%%~nxa*.jpg" 2^>nul'
 ) DO REN "%%f" "%%f.jpg"
 SET /a count=0
 FOR /f "delims=" %%f IN (
  'dir /b /a-d "*.jpg"  2^>nul'
 ) DO ECHO REN "%%f" "%%~nxa (!count!).jpg"&SET /a count +=1
 IF EXIST "%%~nxa (0).jpg" ECHO REN "%%~nxa (0).jpg" "%%~nxa.jpg"
 POPD 
)

GOTO :EOF

您需要更改sourcedir的设置以适合您的具体情况。

第一步是以递归方式处理目录名称%%a。然后push编辑它们(切换到指定目录%%),并在执行pop之前执行主进程以恢复原始目录。

主进程首先读取( dirnameanything .jpg)的目录,并按反向名称顺序排序,以确保最长的名称是第一个。然后使用额外的" .jpg"重命名找到的任何名称。这意味着如果目录已经被处理,(例如)GAM002.jpg可能存在,那么它被重命名为gam002.jpg.jpg,因此在第一次重命名后将不存在gam002.jpg - 同样适用于{ {1}} - 现在是gam002 (1)。即使gam002 (1).jpg.jpg已经存在,此方法也是安全的,因为重命名是以反向名称顺序执行的,因此在尝试重命名{{1}之前,gam002.jpg.jpg将被重命名为gam002.jpg.jpg转到gam002.jpg.jpg.jpg

下一步是真正的重命名序列。列出每个gam002.jpg,然后然后处理,因此重命名原始文件列表,避免遇到已重命名的文件时出现问题。只需在父目录名称后面的括号中增加gam002.jpg.jpg即可重命名每个。

最后," parentdirectoryname (0).jpg"重命名为" parentdirectoryname .jpg"一切都很完整。