【问题标题】:Use Batch file to rename files and increment postfix使用批处理文件重命名文件并增加后缀
【发布时间】:2013-07-11 10:44:14
【问题描述】:

我有一个文件列表。每天我都会生成一个新的文件列表。我需要保留以前生成的文件列表。我想在昨天文件的末尾添加和编号,并且我想将所有以前的文件增加 1,以便昨天的文件始终为 0001。例如:

昨天生成的文件是:

P.xls
T.xls
W.xls

我想运行一个为它们命名的批处理文件:

P0001.xls
T0001.xls
W0001.xls

好的。我可以做那部分。没什么大不了。这些文件总是命名为 P、T 和 W,因此这部分很容易。更难的部分是每天重命名 P0001.xls、T0001.xls 和 W0001.xls。我可以制作一个像这样开头的批处理文件:

rename P9998.xls P9999.xls

然后我一直工作到 P0001.xls,但这太荒谬了。我不想为每个文件输入 10,000 行。

非常感谢您对此批处理文件的任何帮助。

基思

【问题讨论】:

    标签: batch-file rename increment


    【解决方案1】:

    下面的批处理文件以更快的方式实现所需的重命名,因为它处理文件编号而不是文件名,因此每个循环重命名 3 个文件;此外,for /L 循环比带有文件名的常规for 运行得更快。如果文件数量很大,速度很重要。

    @echo off
    setlocal EnableDelayedExpansion
    
    rem Rename files generated yesterday
    ren ?.xls ?0000.xls
    
    rem Get the number of the last file
    for /F "delims=" %%a in ('dir /B /A-D /O-N *.xls') do (
       set lastName=%%a
       goto continue
    )
    :continue
    set /A oldNumber=1%lastName:~1,4%, newNumber=oldNumber+1, numFiles=newNumber-10000
    
    rem Rename all files
    for /L %%a in (1,1,%numFiles%) do (
       ren ?!oldNumber:~1!.xls ?!newNumber:~1!.xls
       set /A oldNumber-=1, newNumber-=1
    )
    

    【讨论】:

      【解决方案2】:

      与迭代所有可能的数字相比,只处理存在的文件更有效。作为第一步,我暂时将.ren 附加到文件中,这样我就不必担心按降序处理。

      此解决方案假定所有以 P W 或 T 开头的现有 .XLS 文件都将被重命名并遵循正确的命名约定。它还假定要重命名的文件位于当前目录中。

      @echo off
      setlocal enableDelayedExpansion
      for %%C in (P T W) do ren %%C*.xls *.*.ren
      ren ?.xls.ren ?0000.*
      for %%F in (*.xls.ren) do (
        set "num=%%F"
        set /a "num=1!num:~1,4! - 9999"
        set "num=000!num!"
        ren %%F ?!num:~-4!.xls
      )
      

      这是一个更直接但可能效率较低的版本,它可以安全地忽略不符合命名约定的以 P T 或 W 开头的 .XLS 文件。这里我按降序对文件进行排序,这样我只需要重命名每个文件一次。

      @echo off
      setlocal enableDelayedExpansion
      for /f "delims=" %%F in (
        'dir /b /a-d /o-n *.xls^|findstr /rix [PTW][0-9][0-9][0-9][0-9].xls'
      ) do (
        set "num=%%F"
        set /a "num=1!num:~1,4! - 9999"
        set "num=000!num!"
        ren %%F ?!num:~-4!.xls
      )
      for %%C in (P T W) do ren %%C.xls ?0001.*
      

      我正在利用 REN 如何处理通配符的一些鲜为人知的特性。请参阅How does the Windows RENAME command interpret wildcards? 了解更多信息。

      【讨论】:

      • @KeithMungo - 如果它完全回答了您的问题,请不要忘记接受答案。只需单击左上角附近的复选标记。该操作让其他人知道该问题已得到解答,它会奖励您 2 点声望,并奖励答案发布者 15 点。
      • @MethodMan - 不要向现有答案提出新问题。如果您有任何问题,请发布您自己的问题。
      猜你喜欢
      • 2019-12-04
      • 2019-05-25
      • 2014-02-26
      • 2017-09-16
      • 2020-10-11
      • 2019-06-08
      • 2013-06-25
      • 1970-01-01
      相关资源
      最近更新 更多