将文件重命名为编号顺序时保留原始顺序?

Retain original order when renaming files to number sequence?

这是一个启用延迟扩展的示例脚本,用于重命名文件:
How to write a batch file to rename files in numerically order within a particular folder?

如何保留原始文件顺序? 我需要 Bash 和 Batch (DOS/Windows) 的可能解决方案。


编辑:好的 - 我认为我的批处理情况的具体示例对于理解排序问题是必要的。
我拥有的是文件夹中的 .cab 文件,如下所示:
“1_1.cab”-“1_120.cab”
我试图了解如何为结果重命名文件:
“1.cab”-“120.cab”
理论上必须有一种方法可以在重命名时照顾到所有“1_”以实现原始顺序。


在这种特定情况下批处理的可能解决方案:
for /F "tokens=1,2 delims=_" %%G in ('dir /b /A:-D *.cab') do rename %%G_%%H %%H

据我了解你的问题,我建议你试试:

for file in *; do ((i++)); mv "$file" "$i.${file##*.}"; done

这会将当前目录中所有未隐藏的文件重命名为名称后跟与原始文件相同的后缀的数字文件。这些数字将遵循文件的现有顺序。

还要确保您没有以数字作为基本名称的文件:您可能会删除它。

如果您不确定结果,请将 mv 更改为 echo mv,以便在您实际操作之前先了解会发生什么。

在 OP 编辑​​问题后说他只想从前缀 1_ 中删除文件名,我建议一个新的解决方案:

for file in *; do mv "$file" "${file#1_}"; done

如果前缀可以是任何数字后跟下划线,则可以采用后一种解决方案。