繁体   English   中英

批处理文件以重命名多个目录中的文件名

[英]Batch File to rename filenames from multiple directories

我在主根文件夹的文件夹中有多个* .jpg文件。 我需要一个简单的批处理文件,该文件会将所有文件重命名为它的文件夹名。 例如:

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文件夹运行的批处理文件。

抱歉,我是所有新手,所以我想尝试一下我发现非常有趣的事情!

提前致谢

@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它们push (切换到指定目录%% ),并在执行pop以恢复原始目录之前执行主进程。

主进程首先读取目录( dirnameanything .jpg),并以反向名称顺序进行排序,以确保最长的名称在前。 然后,找到的任何名称都将使用一个额外的“ .jpg”重命名。这意味着,如果目录已经处理过,例如,GAM002.jpg可能存在,则将其重命名为gam002.jpg.jpg ,因此gam002.jpg将不存在。第一次重命名后gam002 (1) -现在是gam002 (1).jpg.jpg 即使gam002.jpg.jpg已经存在,因为改名是反向名的顺序执行这种方法是安全的,所以gam002.jpg.jpg将已改名gam002.jpg.jpg.jpg进行的尝试之前重命名gam002.jpggam002.jpg.jpg

下一步是真正的重命名序列。 每个.jpg都会列出并进行处理,因此将原始文件列表重命名,从而避免了遇到已经重命名的文件的问题。 只需使用父目录名称后的括号中的递增count来简单地重命名每个目录。

最后,将“ parentdirectoryname (0).jpg”重命名为“ parentdirectoryname .jpg”, 至此完成。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM