如何使用批处理测试非2位数文件名

时间:2015-02-06 05:13:20

标签: batch-file

我需要查看目录中的所有jpg文件是否都有2位数字(例如01,02,30,99)。如果他们不这样做,他们需要重命名。如果他们这样做,他们已经被重命名,我不应该改变它们。

下面的测试代码列出了每个文件名,其中包含"是"如果名称是两位数或"否"如果它不是。 问题是它始终如一地回归"没有"对于文件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并没有帮助。这可能是For / L增量的方式吗?我还应该寻找什么?

顺便说一下,如果有“差距”,那就没关系。在编号名称之间 - 01,03,10,11是好的 - 所以我不需要检查它。

2 个答案:

答案 0 :(得分:1)

试试这个:

dir /b *.jpg| findstr /v /i /r /b /e "[0-9][0-9].jpg"
使用FINDSTR过滤文件时,

应该更快,而不是使用FOR /L进行迭代。

答案 1 :(得分:1)

您的代码失败的原因是因为IF将0个带前缀的数字视为八进制,0809不是有效的八进制数。因此,IF会进行字符串比较而不是数字比较,08不等于8