我一直在使用GP重命名批量重命名文件;这比单独更正每个文件更有效率,但似乎仍然效率较低,主要是因为我不理解所使用的正则表达式语法,或者因为正则表达式实现不完整1
给出以下语法的文件列表:
(01) - title of file1.avi
(02) - title of file2.avi
(03) - title of file3.avi
我尝试使用“替换”(选择正则表达式选项,取消选择区分大小写选项):
(\(\d{2}\))
然后显示预览(假设我尚未指定“替换为”选项):
title of file1.avi
title of file2.avi
title of file3.avi
这很好,显然正则表达式识别出了正确的组((01)
)。现在,我希望在“替换为”选项中(使用 JavaScript 语法)使用:
$1
(我也尝试使用'$1'
和)\1
'\1'
这只是为了检查我是否可以访问匹配的组,但似乎不能,正如我所预料的那样,匹配的组被文字替换字符串替换了。
所以,我的问题是:是否可以匹配一组特定的字符(在本例中是括号内的数字),然后将它们插入替换字符串中?因此:
(01) title of file1.avi
(02) title of file2.avi
(03) title of file3.avi
变成:
01 title of file1.avi
02 title of file2.avi
03 title of file3.avi
- 我绝对地怀疑以前的, 亲自。
答案1
不幸的是,看来你不能;而且这是一个不完整的正则表达式实现的错误。
在所有GPRename 语言环境翻译似乎很明显:
msgstr "不能使用正则表达式的反向引用 因为 $1 被视为 Perl 变量。”
既然您熟悉 Perl 正则表达式,我可以建议您使用优秀的rename
命令行实用程序吗?
- 总是首先使用
-n
开关进行预览。 - 您的正则表达式中有一个拼写错误 - 它应该是
\((\d{2})\)
,并将分组放在转义的括号内。 例子:
$ 重命名 -n 's/\((\d{2})\)/$1/' *.avi (01)文件 1.avi 的标题重命名为 01 文件 1.avi 的标题 (02)文件 2.avi 的标题重命名为 02 文件 2.avi 的标题 (03)file3.avi 的标题重命名为 03 file3.avi 的标题
rename
使用(详细)开关进行调用-v
并删除-n
以实际执行重命名。
答案2
在 GPRename 中,您可以像这样使用正则表达式:
Name of file 012.txt
Regular Expression: Name of file (\d).txt
Replace: NewFileName_1.txt
在哪里:
1 = like $1
你可以试试。我使用过 \1 或 \$1,但它得到的是 \ 或 \$ 作为简单文本。这很奇怪,但事实就是如此。