Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 用于更改文件名顺序的正则表达式_Regex - Fatal编程技术网

Regex 用于更改文件名顺序的正则表达式

Regex 用于更改文件名顺序的正则表达式,regex,Regex,我扫描了一组大约100张打印的照片,每个照片都有一个带有前缀和自动递增索引的文件名,当我已经扫描了80张照片时,我意识到顺序不对。不管怎样,我继续说,并完成了,但现在我有100个文件与这些名字 Prefix1_000.jpg Prefix1_001.jpg ... Prefix1_099.jpg 事实证明(比方说)图片“Prefix1_080.jpg”实际上应该是集合中的第一个,“Prefix1_081.jpg”是第二个,依此类推 我已经下载了PFrank,它允许我使用正则表达式批量重命名文件

我扫描了一组大约100张打印的照片,每个照片都有一个带有前缀和自动递增索引的文件名,当我已经扫描了80张照片时,我意识到顺序不对。不管怎样,我继续说,并完成了,但现在我有100个文件与这些名字

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是合理的选择。