【问题标题】:For loop to rename .jpg files through batch fileFor循环通过批处理文件重命名.jpg文件
【发布时间】:2014-01-16 06:07:42
【问题描述】:

我想重命名一系列 .jpg 但我想在文件名末尾附加字符串。请帮助我如何实现这一点,因为我是批处理文件编码的新手。

一系列 jpg 文件 - CurDt_S1、CurDt_S2、CurDt_S3 等。直到 S20。

我想将 CurDt_S1 替换为 CurDt_1_S1 为 - CurDt_1_S1、CurDt_1_S2、CurDt_1_S3 直到 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

谢谢, 斯内哈

【问题讨论】:

  • 正确的标记(使用的语言)会让你更快地获得帮助..
  • 谢谢大家。最简单的方法对我有用。但是现在,我想对所有文件进行重命名。示例 - CurDt_S1 wud 变为 CurDt_1_S1,CurDt_1_S1 wud 变为 CurDt_2_S1 等,并且 S* 值 wud 从 1 到 20 不等。我坚持使用粗体突出显示的 for 循环部分。 set i=1 for %%f in ("C:\Users\341256\Documents\batchfile\CurDt_3_S*.jpg") do call :renameit "%%f" goto done pause :renameit ren CurDt_3_S%i%.jpg CurDt_4_S%i%.jpg ren CurDt_2_S%i%.jpg CurDt_3_S%i%.jpg ren CurDt_1_S%i%.jpg CurDt_2_S%i%.jpg ren CurDt_S%i%.jpg CurDt_1_S%i%。 jpg set /A i+=1 :done pause
  • 谁能建议我使用的代码是否正确且好用?

标签: loops batch-file for-loop


【解决方案1】:
for /L %%x in (1,1,20) do ECHO ren CurDt_S%%x.jpg CurDt_1_S%%x.jpg

应该适合你。

所需的命令只是ECHOed 用于测试目的。验证命令正确后,将ECHO REN 更改为REN 以实际重命名文件。

【讨论】:

    【解决方案2】:

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

    @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 文件位于同一目录中。

    希望这会有所帮助。

    【讨论】:

      【解决方案3】:

      我终于找到了最简单的方法,以最简单的方式使用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*
      

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

      【讨论】:

        【解决方案4】:
        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命令重命名文件。

        【讨论】:

          【解决方案5】:

          我正在使用以下代码重命名文件。基本上,它将如下 - CurDt_S1 将重命名为 CurDt_1_S1 直到 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 对于 %%f in ("C:\Users\341256\Desktop\test_batch_files\CurDt_4_S*.jpg") 调用 :currentdate4 "%%f" 对于 %%f in ("C:\Users\341256\Desktop\test_batch_files\CurDt_3_S*.jpg") 调用 :currentdate3 "%%f" 对于 %%f in ("C:\Users\341256\Desktop\test_batch_files\CurDt_2_S*.jpg") 调用 :currentdate2 "%%f" 对于 ("C:\Users\341256\Desktop\test_batch_files\CurDt_1_S*.jpg") 中的 %%f,请调用 :currentdate1 "%%f" 对于 ("C:\Users\341256\Desktop\test_batch_files\CurDt_S*.jpg") 中的 %%f,请调用 :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
          

          如果正确,请提出建议。

          谢谢, 斯内哈

          【讨论】:

          • 您好,我正在使用您建议的代码重命名。我已经在 abive 帖子中详细提到了它。但它对我不起作用,它不是重命名所有文件,而是重命名几个文件。你能帮我解决这个问题吗?
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2023-04-08
          • 1970-01-01
          • 2017-03-27
          • 1970-01-01
          • 1970-01-01
          • 2019-06-08
          • 2016-04-09
          相关资源
          最近更新 更多