用于循环以通过批处理文件重命名.jpg文件

时间:2014-01-16 06:07:42

标签: loops batch-file for-loop

我想重命名一系列.jpg,但我想在文件名的末尾添加字符串。请帮助我如何解决这个问题,因为我是批处理文件编码的新手。

系列的jpg文件 - CurDt_S1,CurDt_S2,CurDt_S3等。直到S20。

我想将CurDt_S1替换为CurDt_1_S1 - CurDt_1_S1,CurDt_1_S2,CurDt_1_S3 uptill S20。

以下是我使用的代码 -

setlocal enabledelayedexpansion
    set str=_1
    for %%a in (CurDt_S*.jpg) do (
        set oldName=%%a
        set newName=oldname+str
            call :Action
        echo.
        echo back in For loop
    )
    echo.
    echo For loop completed
    echo !oldName!
    echo !newName!
    endlocal
    goto:eof

    :Action
    echo.
    echo start of Action loop
    echo !oldName!
    echo !newName!
    ren "!oldName!" "!newName!"
    echo end of Action loop

谢谢, 斯纳

5 个答案:

答案 0 :(得分:1)

for /L %%x in (1,1,20) do ECHO ren CurDt_S%%x.jpg CurDt_1_S%%x.jpg

应该适合你。

所需命令仅用于ECHO以用于测试目的。在您确认命令正确无误后,将ECHO REN更改为REN以实际重命名文件。

答案 1 :(得分:0)

这是我能想到的最简单的方法:

@echo off
set i=1
for %%f in (CurDt_S*.jpg) do call :renameit "%%f"
goto done

:renameit
ren CurDt_S%i%.jpg CurDt_1_S%i%.jpg

set /A i+=1
:done

它假定批处理文件与jpg文件位于同一目录中。

希望这有帮助。

答案 2 :(得分:0)

for %%f in ("c:\somewhere\CurDt_*.jpg") do (
    for /f "tokens=1,* delims=_" %%g in ("%%~nf") do echo ren "%%~ff" "%%~g_1_%%~h%%~xf"
)

对于每个指定的文件,使用第一个下划线作为分隔符拆分文件名以获取这两个部分,并将文件重命名为第一个标记+ _1_ +第二个标记+文件扩展名。

结果仅响应控制台。如果输出正确,请删除echo命令以重命名文件。

答案 3 :(得分:0)

我使用以下代码重命名文件。基本上,它将如下 - CurDt_S1将重命名为CurDt_1_S1 uptill S20, CurDt_1_S1到CurDt_2_S1直到S20, CurDt_2_S1到CurDt_3_S1直到S20, CurDt_3_S1到CurDt_4_S1直到S20, 和CurDt_4_S1文件将存档到diff文件夹。

代码如下 -

设置i = 1             for %% f in(“C:\ Users \ 341256 \ Desktop \ test_batch_files \ CurDt_4_S * .jpg”)do call:currentdate4“%% f”             for %% f in(“C:\ Users \ 341256 \ Desktop \ test_batch_files \ CurDt_3_S * .jpg”)执行调用:currentdate3“%% f”             for %% f in(“C:\ Users \ 341256 \ Desktop \ test_batch_files \ CurDt_2_S * .jpg”)执行调用:currentdate2“%% f”             for %% f in(“C:\ Users \ 341256 \ Desktop \ test_batch_files \ CurDt_1_S * .jpg”)执行调用:currentdate1“%% f”             for %% f in(“C:\ Users \ 341256 \ Desktop \ test_batch_files \ CurDt_S * .jpg”)执行调用:currentdate“%% f”             转到             出口

        :currentdate4
            if exist C:\Users\341256\Desktop\test_batch_files\CurDt_4_S*.jpg (
            rem move C:\Users\341256\Desktop\test_batch_files\CurDt_4_S*.jpg C:\Users\341256\Desktop\test_batch_files\Archive
            echo moved current_date-4 files )       

        :currentdate3
        if exist C:\Users\341256\Desktop\test_batch_files\CurDt_3_S*.jpg (
            ren CurDt_3_S%i%.jpg CurDt_4_S%i%.jpg
            echo renamed _3 to _4 )

        :currentdate2
            if exist C:\Users\341256\Desktop\test_batch_files\CurDt_2_S*.jpg (
            ren CurDt_2_S%i%.jpg CurDt_3_S%i%.jpg
            echo renamed _2 to _3 )

        :currentdate1
        if exist C:\Users\341256\Desktop\test_batch_files\CurDt_1_S*.jpg (
            ren CurDt_1_S%i%.jpg CurDt_2_S%i%.jpg
            echo renamed _1 to _2 )

        :currentdate
        if exist C:\Users\341256\Desktop\test_batch_files\CurDt_S*.jpg (
            ren CurDt_S%i%.jpg CurDt_1_S%i%.jpg
            echo renamed currdt to _1
            echo complete )

        set /A i+=1
        :done
        pause

请建议是否正确。

谢谢, 斯纳

答案 4 :(得分:0)

我终于找到了 SIMPLEST方式,以最简单的方式使用 BATCH来实现这一目标。

使用以下代码 -

del CurDt_5_S*
ren CurDt_4_S* CurDt_5_S*
ren CurDt_3_S* CurDt_4_S*
ren CurDt_2_S* CurDt_3_S*
ren CurDt_1_S* CurDt_2_S*

我测试了它和它的工作。 :) :) :))