【问题标题】:Retain original order when renaming files to number sequence?将文件重命名为编号顺序时保留原始顺序?
【发布时间】:2020-08-31 11:16:10
【问题描述】:

这是一个用于重命名文件的带有 enabledelayedexpansion 的示例脚本:
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

【问题讨论】:

  • 你指的问题是关于DOS批处理文件的。在这里,您询问有关 bash 的问题。所以这两个问题之间的关系比较模糊,解决方案也会大不相同。
  • 其实我都想知道。如何使用 DOS 批处理文件解决这个问题?
  • 在 DOS 中解决这个问题?完全不知道,对不起。但我认为你可以通过安装 CygWin 在 Windows 中运行 bash 脚本。
  • 这取决于您认为原始文件的顺序。特别是因为您链接的示例中的那些不是按字母顺序、数字顺序或自然顺序,并且该问题中没有任何内容可以显示大小/创建时间/上次修改/上次访问。如果要更具体一些,关于我们应该如何提出我们的建议或答案,将会有所帮助。请edit your question 进行澄清。另请注意,本网站的功能不是为人们编写代码,而是帮助他们解决失败的代码。
  • 好的。对于我特定情况下的批处理(请参阅我的上次编辑),适用的方法可能是: for /F "tokens=1,2 delims=_" %%G in ('dir /b /A:-D *.cab')重命名 %%G_%%H %%H

标签: bash batch-file rename batch-rename


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 请注意,这缺少处理带有空格、全局字符等文件名所需的大量引用。mv "$file" "$i.${file##*.}" 会更安全。
  • @CharlesDuffy:你是绝对正确的。我分心了。我后来意识到了,回到我的电脑纠正它,但发现你已经评论了。
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 2021-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-25
    • 1970-01-01
    • 2017-04-10
    • 1970-01-01
    • 2023-04-05
    相关资源
    最近更新 更多