使用批处理动态重命名文件,没有固定的字符串位置

时间:2018-06-09 23:57:14

标签: timestamp batch-rename

我有一批需要动态名称更改的文件。例如文件名

abc_def_ghi_20180609123211.txt

手头有两项任务

  1. 我需要删除时间戳和下划线 时间戳,因此文件名变为abc_def_ghi.txt
  2. 现在,时间戳位于第3个下划线,如示例abc_def_ghi_20180609123211.txt中所示。但将来可能不会。无论如何,时间戳总是在最后一个下划线之后(将来最后一个下划线可能仍然是第3个或者是第4个或第5个等等......)
  3. 我对批处理文件不太熟悉。我试过了

    for /F %%i in ('dir /b *.txt') do echo mv %%i %%i_1
    
    DIR nofile || (PAUSE && EXIT /B 1)
    

1 个答案:

答案 0 :(得分:0)

使用PowerShell一个内核很容易完成,其中包含一个RegEx,匹配基名末尾的14位数字(没有扩展名的名称)

ls *_*_*.txt|? BaseName -match '(_\d{14})$'|REN -NewName {$_.Name -replace $Matches[1]} -Whatif

如果输出看起来没问题,请删除尾随-WhatIf

相同的代码有别名:

Get-ChildItem *_*_*.txt|Where-Object BaseName -match '(_\d{14})$'|
    Rename-Item -NewName {$_.Name -replace $Matches[1]} -Whatif