批处理如何读取文件名中的最后一位数字,然后使用该数字+ 1移动

时间:2015-09-13 20:42:12

标签: batch-file filenames windows-10

所以我有一个程序正在创建一个名为" demo.dem"的文件。我现在正在做的是将它移动到另一个文件夹。我想要一个批处理脚本来移动文件来自" C:\ foo"到" C:\ bar"这本身很容易,但该文件将有多个文件,名为" demo.dem"所以我需要它根据文件夹中的内容添加一个新数字。可以说我已经在文件夹中有了1-5的演示版。然后下一个需要是" demo6.dem"下面我有一些代码,但我不是批处理专家。

this

你可以说这不会奏效。有谁知道如何让它正常工作? (如果您觉得可以更好地说出来,请编辑帖子。)

2 个答案:

答案 0 :(得分:2)

这可能不是最优雅的方式,因为它只是迭代直到成功,但它应该工作:

@echo off 
set counter=1
:retry
if NOT EXIST c:\bar\demo%counter%.dem (
  move c:\foo\demo.dem c:\bar\demo%counter%.dem
 ) else (
  set /a counter=%counter%+1
  goto retry
 )
echo.
echo Created c:\bar\demo%counter%.dem!
echo.
set counter=

答案 1 :(得分:0)

这并不完全是你想要做的,但目标是通过变量%RANDOM%%TIME%作为名称来实现,但无论如何,以下应该可以胜任。

注意:命令FOR搜索连字符-和点.所包围的数字,即。演示001.dem

因此,重要的是要尊重重命名掩码,否则稍后脚本可能无法检测到最大数字。

如果您想要更改模板,则需要您处理设置tokendelims

@echo off
echo List directory
dir /b C:\bar\ |sort /r

for /f "tokens=2 delims=-." %%a in ('dir /b C:\bar\demo-???.dem ^|sort /r ^|findstr /r [0-9]') do (
  set "num=%%a"
  goto done
)

:done
set /a "num=%num%+1"
dir /b |sort /r
echo the highest number found is %num% -1
move c:\foo\demo.dem  c:\bar\demo-%num%.dem
dir /b C:\bar\ |sort /r

<强>更新 我编辑了Dir命令的掩码,仅列出具有特定掩码(dir /b C:\bar\demo-???.dem)的文件,以保持文件正确排序,否则如果你有1-2位数字,前面没有0的文件应该打破排序。

示例:假设您对这一堆文件进行排序:demo-009.txt,demo-010.txt,demo-3.txt;如果没有遮罩(dir /b demo-???.txt),您将获得demo-3.txt作为最高编号。所以编号前面的0很重要。