【问题标题】:Batch: Renaming files numeric (Count up every time)批处理:重命名文件数字(每次计数)
【发布时间】:2017-09-20 00:47:52
【问题描述】:

我希望我没有用这个标题混淆任何人,我不能用简短的一行来很好地描述我的问题...我有一个包含多个文件的文件夹(都具有相同的扩展名)并且我想重命名他们都是数字。这应该很容易,因为批处理文件每次替换名称时都必须进行计数。但我可能是错的。

除了一些基础知识外,我对批处理知之甚少,但我总是乐于了解更多信息。

提前感谢您的任何回答!

【问题讨论】:

  • 您自己尝试过吗?如果是,请在此处分享。
  • @S.Ahmad 是的,但我没走多远。事实上,我设法写了大约 5 行,然后才注意到我需要告诉批次计数,我不知道该怎么做,而且互联网上的所有其他解决方案似乎都太复杂了。

标签: batch-file numeric counting


【解决方案1】:

创建一个空文件夹会更简单,将文件移动到新文件夹,同时重命名它们,然后将它们移回旧文件夹。这样一来,重命名现有文件或遍历已重命名的文件就不会出现任何问题。

我原来的解决方案:

@echo off
setlocal enabledelayedexpansion
set folder=C:\path\to\existing\folder
md %folder%.TEMP
set /a n = 0
for %%f in ("%folder%\*") do (
    set /a n += 1
    move "%%f" "%newfolder%\!n!%%~xf"
)
move "%folder%.TEMP\*" "%folder%"
rd %folder%.TEMP

使用@Compo 的 cmets 更新,按照创建时间的顺序使用前导零对文件进行编号(将 /TC 更改为 /TW 以使用最后修改日期):

@echo off
setlocal enabledelayedexpansion
set folder=C:\path\to\existing\folder
md %folder%.TEMP
set /a n = 0
for /f "delims=" %%f in ('dir/b/a-d-s-l/od/tc "%folder%"') do (
    set /a n += 1
    set zn=0000000!n!
    set zn=!zn:~-8!
    move "%%f" "%newfolder%\!zn!%%~xf"
)
move "%folder%.TEMP\*" "%folder%"
rd %folder%.TEMP

【讨论】:

  • 我建议使用按日期和时间排序的零填充,以便它们仍然可以排序。 移动文件会改变原始时间戳吗?
  • @Compo - 添加了填充。
  • 我仍然认为您的编号应该基于现有的书面 \TW 或创建的 \TC 时间戳。 For /F "Delims=" %%f In ('Dir/B/A-D-S-L/OD/TC "%folder%"') Do (
  • @Compo 感谢您的澄清;我添加了你的建议。
猜你喜欢
  • 2019-06-08
  • 2012-12-10
  • 2014-02-26
  • 2011-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-10
  • 2019-10-31
相关资源
最近更新 更多