Windows 根据原始连续编号重命名文件-从最低编号到最高编号

Windows 根据原始连续编号重命名文件-从最低编号到最高编号,windows,batch-file,Windows,Batch File,我删除了文件2.png和5.png-是否有办法将编号再次调整为连续?(保留从最低到最高的原始顺序) 转向 进入 当然可以: 就是这样,因为保存原始文件顺序很重要 set "id=0" for /f "delims=" %%a in ('dir /a-d /b /od "*.png"') do ( set /a "id+=1" setlocal enabledelayedexpansion for %%b in (!id!) do endlocal & ren "%%~fa" "%%b.p

我删除了文件
2.png
5.png
-是否有办法将编号再次调整为连续?(保留从最低到最高的原始顺序)

转向

进入

当然可以:


就是这样,因为保存原始文件顺序很重要

set "id=0"
for /f "delims=" %%a in ('dir /a-d /b /od "*.png"') do (
set /a "id+=1"
setlocal enabledelayedexpansion
for %%b in (!id!) do endlocal & ren "%%~fa" "%%b.png"
)

只有一个建议用于前导零,也可以观察
对标志使用的评论:
/O:D/T:W

@echo关闭
cd/d“%~pd0”

调用集“\u id=”这实际上不是问题所在。我简化了我的问题。我认为你应该进一步澄清。否则,我们仍在猜测。现在,根据编辑,在删除1_2.png等之后,听起来您想将1_3.png重命名为1_2.png,并在删除后继续。是吗?是的,我就是这个意思。你可能需要完全改变你的方法。我这么说是因为在你删除你的FLE之前,你不知道为了重新编号而删除了哪些FLE。因此,我的最佳猜测是,在完成删除之后,只需搜索重新编号的脚本。这两个任务并没有真正的联系,尝试将它们作为一个单一的过程至少很难说。这是一个问题,直到你改变它。虽然这可以在特定的环境下工作,但它肯定不是一个解决方案,除非我们能保证该环境。您的代码不确定任何顺序,它只是依赖于
*.png
按您希望的顺序列出它们,我们无法保证这一点,特别是在不知道命名计划标准、有多少文件(和/或它们的编号)的情况下,目标文件系统等@Compo for循环按字母顺序遍历文件。这是数字顺序,前提是所有数字的位数相同。如果不是的话,他必须先解决这个问题。事实并非如此,而且我真的没有心情开始解释,所有的可能性,可以说,在某些文件系统上的测试中,它可能会以字母顺序输出,但这不是你能保证的。不管怎样,虽然它只处理少量的单位数整数,但在您的特定系统/卷/环境中,一旦达到
10
,字母顺序将
10
放在
1
之后,而不是
9
之后,所以你的解决方案在任何情况下都会修改原来的顺序。想象一下,如果你在评论区回答了我的问题,我们会更快到达这一点。显然,您已经确定原始排序标准是基于日期的。请注意,如果您专门将
/T
选项与
C
,(创建日期和时间),
A
,(上次访问的日期和时间)或
W
,(上次写入的日期和时间)结合使用,它将有助于您未来的代码读者,甚至有一天您自己也会受益;e、 g.
Dir/B/A:-D/O:D/T:W*.png
。还请注意,这将选择扩展名以“
.png
”开头的文件。
1.png   
2.png  
3.png  
4.png
setlocal enabledelayedexpansion

set n=1
for %%a in (*.png) do (
ren %%a !n!.png
set /a n+=1
)
set "id=0"
for /f "delims=" %%a in ('dir /a-d /b /od "*.png"') do (
set /a "id+=1"
setlocal enabledelayedexpansion
for %%b in (!id!) do endlocal & ren "%%~fa" "%%b.png"
)