如何在批处理脚本中的多个文件上按日期添加递增数字预加值?

时间:2016-05-13 14:57:59

标签: shell batch-file window

我正在使用窗口操作系统,我下载视频作为系列课程。我想按日期订购这些视频,并为第一个视频添加前缀编号为1比2,3,我在这里找到答案How to rename and add incrementing number suffix on multiple files in Batch Script?它可以在文件名中添加数字,但只能按名称排序日期。感谢和抱歉我的英语。

1 个答案:

答案 0 :(得分:0)

这是aschipfl在评论中建议的简单实现:

@echo off
setlocal enableDelayedExpansion
set /a n=0
for /f "delims=" %%F in ('dir /b /od') do (
  set /a n+=1
  ren "%%F" "!n!_%%F"
)

但是有两个潜在的问题:

1)FOR / F命令的默认EOL字符为; - 如果文件名以;开头,则会跳过它。简单的解决方案是将EOL设置为无法在文件名中出现的字符 - :是一个不错的选择。

2)如果文件名包含!字符,则重命名将失败,因为已启用延迟扩展,并且在延迟扩展之前展开%%F。解决方案是将文件名保存到变量,然后在循环中切换延迟扩展ON和OFF

@echo off
setlocal disableDelayedExpansion
set /a n=0
for /f "eol=: delims=" %%F in ('dir /b /od') do (
  set "file=%%F"
  set /a n+=1
  setlocal enableDelayedExpansion
  ren "!file!" "!n!_!file!"
  endlocal
)

有一个更简单的选项 - 使用FINDSTR /NDIR /B /OD输出前加上行号,然后使用FOR /F来解析数字和文件名。现在不需要计数器变量或延迟扩展。

@echo off
for /f "delims=: tokens=1*" %%A in ('dir /b /od ^| findstr /n "^"') do ren "%%B" "%%A_%%B"

您甚至不需要批处理文件。您可以直接从命令行使用以下命令:

for /f "delims=: tokens=1*" %A in ('dir /b /od ^| findstr /n "^"') do ren "%B" "%A_%B"