Regex 用于更改文件名顺序的正则表达式
我扫描了一组大约100张打印的照片,每个照片都有一个带有前缀和自动递增索引的文件名,当我已经扫描了80张照片时,我意识到顺序不对。不管怎样,我继续说,并完成了,但现在我有100个文件与这些名字Regex 用于更改文件名顺序的正则表达式,regex,Regex,我扫描了一组大约100张打印的照片,每个照片都有一个带有前缀和自动递增索引的文件名,当我已经扫描了80张照片时,我意识到顺序不对。不管怎样,我继续说,并完成了,但现在我有100个文件与这些名字 Prefix1_000.jpg Prefix1_001.jpg ... Prefix1_099.jpg 事实证明(比方说)图片“Prefix1_080.jpg”实际上应该是集合中的第一个,“Prefix1_081.jpg”是第二个,依此类推 我已经下载了PFrank,它允许我使用正则表达式批量重命名文件
Prefix1_000.jpg
Prefix1_001.jpg
...
Prefix1_099.jpg
事实证明(比方说)图片“Prefix1_080.jpg”实际上应该是集合中的第一个,“Prefix1_081.jpg”是第二个,依此类推
我已经下载了PFrank,它允许我使用正则表达式批量重命名文件。问题是我对它们知之甚少
我想将左侧的名称重命名为右侧的名称:
Prefix1_000.jpg --> Prefix2_020.jpg
Prefix1_001.jpg --> Prefix2_021.jpg
...
Prefix1_079.jpg --> Prefix2_099.jpg
Prefix1_080.jpg --> Prefix2_000.jpg
Prefix1_081.jpg --> Prefix2_001.jpg
...
Prefix1_099.jpg --> Prefix2_019.jpg
有可能用正则表达式实现这一点吗?如果是,您会使用哪些搜索和替换模式?我可以更改前缀(以避免自重叠)
已编辑:不连续性不必是10的倍数,如80。事实上,这是一个丑陋的数字,比如81。您可以使用PowerShell轻松做到这一点。这是第一个,其余的由你来处理。不应该超过10分钟
Dir Prefix1_00*.jpg | rename-item -newname { $_.name -replace "Prefix1_00","Prefix2_02" }
Dir Prefix1_01*.jpg | rename-item -newname { $_.name -replace "Prefix1_01","Prefix2_03" }
Dir Prefix1_02*.jpg | rename-item -newname { $_.name -replace "Prefix1_02","Prefix2_04" }
Dir Prefix1_03*.jpg | rename-item -newname { $_.name -replace "Prefix1_03","Prefix2_05" }
Dir Prefix1_04*.jpg | rename-item -newname { $_.name -replace "Prefix1_04","Prefix2_06" }
Dir Prefix1_05*.jpg | rename-item -newname { $_.name -replace "Prefix1_05","Prefix2_07" }
Dir Prefix1_08*.jpg | rename-item -newname { $_.name -replace "Prefix1_08","Prefix2_00" }
Dir Prefix1_09*.jpg | rename-item -newname { $_.name -replace "Prefix1_09","Prefix2_01" }
Dir Prefix1_06*.jpg | rename-item -newname { $_.name -replace "Prefix1_06","Prefix2_08" }
Dir Prefix1_07*.jpg | rename-item -newname { $_.name -replace "Prefix1_07","Prefix2_09" }
花了大约10分钟。。。享受吧 阻力最小的途径可能是分10步完成。因此,将
Prefix1(.)0(.)\.jpg
重命名为Prefix2\u12\2\.jpg
,然后将Prefix1(.)1(.)\.jpg
重命名为Prefix2\u13\2\.jpg
,等等。我不建议尝试使用正则表达式进行算术运算
这里简要解释一下语法:每个(.)
表示一个任意的单个字符(
),应该记住以备以后使用((…)
);\.
的意思正好是一个
字符(与您刚才看到的“任何单个字符”的意思相反)。然后,在替换中,\1
和\2
表示“第一个(…)
组”和“第二个(…)
组”
正如Chris Gessler所说,您还可以使用其他更通用的工具。(如果我遇到同样的问题,我可能会用Python来解决。)但是没有特别的理由不使用您拥有的工具。对不起,也许我应该在之前说明这一点。我在示例中使用的“80”实际上不是一个很好的数字。想象一下它是“81”。假设不连续性是81,而不是80。看起来,用你的方法,我应该做100个不同的动作,对吗?在这种情况下,我会手动重命名它们。不是100,只有10。但是你也可以用递增的指数来表示0-7。这是我在这个问题背后的主要好奇心。我能用正则表达式切碎的输入字符串片段做算术吗?我听说过很多关于它们的事,它们看起来非常强大,以至于它们不允许简单地进行算术运算。谢谢。如果中断不是10的倍数和/或文件数不是10的倍数,那么我在这里描述的方法实际上不会很好地工作,您可能不应该接受我的答案!(虽然这是一个很好的答案,正如最初提出的:-)正则表达式功能强大,但它们不是一个很好的算术工具。这也是一个答案。坦白说,我对reg EXP很失望。我想我会自己写一个重命名工具。祝你好运!如果您想要比regexp提供更多的灵活性,那么您可能会发现自己实现了真正编程语言的很大一部分。您可能应该通过嵌入一种实际的编程语言来实现这一点:Python或Lua是合理的选择。