Bash 将文件重命名为数字序列时是否保留原始顺序?

Bash 将文件重命名为数字序列时是否保留原始顺序?,bash,batch-file,rename,batch-rename,Bash,Batch File,Rename,Batch Rename,下面是一个使用enabledelayedexpansion重命名文件的示例脚本: 但如何保留原始文件顺序? 我需要一个针对Bash和批处理(DOS/Windows)的可能解决方案 编辑:好的-我认为有必要用一个具体的例子来说明我的批次情况,以了解排序问题。 我拥有的是文件夹中的.cab文件,如下所示: “1_1.cab”-“1_120.cab” 我试图了解如何为结果重命名文件: “1.驾驶室”-“120.驾驶室” 从理论上讲,必须有一种方法在重命名以实现原始顺序时考虑所有“1” 在这种特定

下面是一个使用enabledelayedexpansion重命名文件的示例脚本:

但如何保留原始文件顺序? 我需要一个针对Bash和批处理(DOS/Windows)的可能解决方案


编辑:好的-我认为有必要用一个具体的例子来说明我的批次情况,以了解排序问题。
我拥有的是文件夹中的.cab文件,如下所示:
“1_1.cab”-“1_120.cab”
我试图了解如何为结果重命名文件:
“1.驾驶室”-“120.驾驶室”
从理论上讲,必须有一种方法在重命名以实现原始顺序时考虑所有“1”


在这种特定情况下,批处理的可能解决方案:

for/F“tokens=1,2 delims=\%%G in('dir/b/A:-D*.cab')请重命名%%G\%%H%%H

据我所知,我建议您尝试:

用于*中的文件;do((i++);mv“$file”“$i.${file##*.}”;完成
这会将当前目录中所有未隐藏的文件重命名为名称为数字,后跟与原始文件相同的后缀的文件。编号将遵循文件的现有顺序

另外,请确保您没有将数字作为基本名称的文件:您可能会将其删除


如果您不确定结果,请将
mv
更改为
echo mv
,以便在您实际操作之前了解将要发生的事情。

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

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

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

您所指的问题是关于DOS批处理文件的。在这里,您可以询问bash的情况。因此,这两个问题之间的关系是相当模糊的,解决方案将非常不同。我想知道这两个问题。我如何用DOS批处理文件解决这个问题?在DOS中解决这个问题?完全不知道,对不起。但我认为你可以通过安装CygWin在Windows中运行BASH脚本。这取决于你认为原始文件顺序是什么。尤其是在您链接的示例中,它们不是按字母顺序、数字顺序或自然顺序排列的,并且在这个问题中没有显示大小/创建时间/上次修改/上次访问。如果我们能更具体一些,根据我们的建议或答案的基础,这会有所帮助。请允许我澄清一下。还请注意,这个网站的功能不是为人们编写代码,而是帮助他们处理失败的代码。好的。对于我的特定情况下的批处理(参见我的上一次编辑),一个适用的方法可能是:对于/F“tokens=1,2 delims=”%%G in('dir/b/A:-D*.cab'),请重命名%%G\%%H%%H%%注意,这缺少大量使用带有空格、全局字符等的文件名所需的引用。
mv“$file”“$i.${file}”
会更安全。@CharlesDuffy:你说得绝对正确。我分心了。我后来意识到了这一点,并回到我的电脑来纠正它,但发现你已经对此发表了评论。