使用 RENAME 為一堆文件添加前綴時出現問題

使用 RENAME 為一堆文件添加前綴時出現問題

我在嘗試重命名資料夾中的數百張圖像時遇到了以下問題(這是給定的,我無法影響它)。

所有文件的結構為“名稱{空格}後綴.JPG」。
所以圖像可以有相同的姓名,但在這種情況下,它們的區別在於後綴。例如

L083192 (1).JPG  
L083192 (2).JPG  
L083192 (3).JPG  
L083192 (4).JPG

或者

L081473 a.JPG  
L081473 b.JPG

目的是為所有具有相同名稱的圖像添加一個計數器(作為前綴)。 IE

1_L083192 (1).JPG  
1_L083192 (2).JPG  
1_L083192 (3).JPG  
1_L083192 (4).JPG

[..]

16_L081473 a.JPG  
16_L081473 b.JPG

計數器在“FOR /F”循環中計算,該循環確定哪些名稱相同,因此應該獲得相同的前綴。
但是當我嘗試透過應用以下 REN 命令來添加計數器前綴時:

ren "%%h*" "!cnt!_%%h*"

我遇到麻煩了。
( %%h and !cnt! are variables of the "FOR /F" loop)

這是相應的輸出:

L083192 (1).jpg >> 1_L0831921).jpg        [i.e. " (" gone missing]  
[..]  
L083192 (4).jpg >> 1_L0831924).jpg        [id.]

這兩個“L081473”文件甚至導致單身的輸出檔(沒有後綴)!

16_L081473.JPG

毫無疑問,這與 dbenham 在他的論文中所描述的機制有連結。關於 REN(AME) 指揮部的大量帖子,但我無法解決上述情況,因為我希望原始檔案名稱被截斷,而不是在此過程中丟失一些中間字元。也許原始文件名中的空格是原因,儘管我在命令中引用了這些文件名REN以容納空格?誰能解釋一下嗎?

此外,由於REN似乎無法產生所需的結果(或可以嗎?),我如何使用普通批次來獲得目標結果?

REN我還嘗試使用COPYor來解決該問題XCOPY,但結果是相同的。這些命令似乎應用了相同的方案——正如 dbenham 仔細建議的那樣在同一篇文章中(見註)。


批次檔

FOR /F %%h IN (input.txt) DO (

    IF NOT "%%h" == "prev" (set /A cnt+=1)  

        [some more logic..]

    cd Images
    ren "%%h*" "!cnt!_%%h*"
    cd..

        [some more logic..]

    set prev=%%h
)

筆記:我剝離了該批次的附加邏輯,這避免了文件被多次重命名。 「input.txt」僅包含所有出現的名稱(即沒有後綴),這足以計算前綴。我可以提供範例文件,但沒有找到如何將其連結到此訊息。此外,這將不允許複製重命名(此外,「Images」資料夾約為 480 Mb)。
透過更改子目錄“Images”來考慮此資料夾中的完整檔案名,其中檔案等待重命名。 (REN僅適用於當前目錄)

答案1

您錯過了,或者沒有意識到我的 RENAME 帖子中這一段的重要性:

任何名稱都可以分解為由. 字元分隔的組件,只能在每個組件的末尾添加或刪除字元。無法從組件的開頭或中間刪除或新增字符,同時使用通配符保留其餘部分。任何地方都允許替換。

您正在嘗試將字元新增至基本名稱的開頭,並使用萬用字元保留基本名稱。根據我上面的陳述,這是不可能做到的。您必須單獨重新命名每個文件。這應該不是特別困難。我假設你的其他邏輯是正確的:

FOR /F %%h IN (input.txt) DO (

    IF NOT "%%h" == "prev" (set /A cnt+=1)  

        [some more logic..]

    cd Images
    for %%F in ("%%h*") do ren "%%F" "!cnt!_%%F"
    cd..

        [some more logic..]

    set prev=%%h
)

%%F請注意,如果包含,!由於啟用了延遲擴展,程式碼將失敗。這可以透過更多代碼來解決。最好一開始就停用延遲擴展,然後根據需要臨時啟用。

setlocal enableDelayedExpansion
for %%N in (!cnt!) do (
  endlocal
  for %%F in ("%%h*") do ren "%%F" "%%N_%%F"
)

相關內容