簡體   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