2015-02-06 35 views
1

我需要確定目錄中的所有jpg文件是否有2位數的名稱(例如01,02,30,99)。如果他們不這樣做,他們需要重新命名。如果他們這樣做,他們已經重新命名,我不應該改變它們。如何使用批次測試非2位數的文件名

下面的測試代碼列出每個文件的名稱,如果名稱是兩位數字,則輸入「yes」,否則輸入「no」。 問題是它始終返回「否」文件08.jpg和09.jpg。我已經測試過幾個目錄。

@Echo off 
SETLOCAL EnableDelayedExpansion 

For %%G in (*.jpg) do (
    Set "filename=%%~nG" 
    Set found=no 
     For /L %%H in (1,1,99) do (
      If !filename! EQU %%H set "found=yes" 
     ) 
    echo !filename! !found! 
) 

我用所有迪爾斯相同的命名蝙蝠,並認爲這可能會在一些奇怪的方式重命名08和09,但01至07是細而手動重命名08和09並沒有幫助。它可能是某種方式對於/ L增量?我還應該尋找什麼?

順便說一句,如果編號名稱之間存在「空白」 - 01,03,10,11是好的 - 所以我不需要檢查。

回答

1

試試這個:

dir /b *.jpg| findstr /v /i /r /b /e "[0-9][0-9].jpg" 

應該更快地FINDSTR,而不是與FOR /L迭代來過濾文件。

+0

dir解決方案將會很好,但我不確定如何「轉向」這些列表文件列表** **不匹配2位數格式的文件 - 或只是找出是否有任何文件不匹配,所以我知道我必須重新命名。 Thx – sjoy 2015-02-06 05:53:37

+0

將問題更改爲「非2位數」這可能是誤導。 – sjoy 2015-02-06 06:03:35

+0

@sjoy findstr解決方案編輯 – npocmaka 2015-02-06 06:14:14

1

您的代碼失敗的原因是因爲IF將0前綴數字視爲八進制數,而0809不是有效的八進制數。所以IF然後進行字符串比較而不是數字比較,並且08不等於8

+0

**非常有用的信息! – sjoy 2015-02-07 08:54:46

相關問題