在windows中使用Perl重命名文件

在windows中使用Perl重命名文件,windows,perl,Windows,Perl,我的程序需要重命名这样结束的文件 档案(1) 档案(2) 档案(3) 我想把它们重命名为这个 文件1 文件2 文件3 我在C++中尝试过,但这似乎不太有效。我认为Perl非常适合它,但我甚至不知道从哪里开始 #!/usr/bin/perl use strict; use warnings; my $dir = 'folder'; my @dir = (); opendir(DIR, $dir); @dir = readdir(DIR); closed

我的程序需要重命名这样结束的文件

档案(1) 档案(2) 档案(3)

我想把它们重命名为这个

文件1 文件2 文件3

我在C++中尝试过,但这似乎不太有效。我认为Perl非常适合它,但我甚至不知道从哪里开始

#!/usr/bin/perl
use strict;
use warnings;

my $dir =       'folder';
my @dir =       ();

opendir(DIR, $dir);
@dir    =       readdir(DIR);
closedir(DIR);

foreach my $file (@dir) {
    my $f=$file;
    $f =~ s/\(/_/;
    $f =~ s/\)//;
    rename "$dir/$file", "$dir/$f";
}

\(
s/\(/\/
中的
与“(
文件(1)
中的
匹配并替换为“\”,因此
$f=~s/\(/\
使
$f
变为
文件1)
s/\/
中的
与文件
文件1中的“/”匹配并替换为“”(无),所以
$f=~s/\)/
使
$f
成为
文件\u 1

您的问题是从哪里开始?所以从哪里开始perl

有关文件重命名,请参阅

要打开目录并进行读取,请参阅


然后再看这里。

要保留原始数据,请使用无损修改器。我可能会做$f=~s/(\d+)/$1/g;相反我不知道是谁投了反对票。谢谢大家的意见,我会仔细研究,直到我能读得更好。顺便说一句,这不是任务,而是我个人的兴趣/用途。$f=~s/(\d+)/$1/g;#我相信这行代码是这样写的:用下划线和捕获变量$1(括号中的数字)替换括号中一个或多个数字。g允许全局匹配,我不确定我们现在需要全局匹配的确切原因。我也在测试它,测试文件(1)变成了测试文件(_1),但由于正则表达式中的双括号,这不起作用。我去掉了一对括号,似乎并没有什么区别,我需要使用((d+)还是什么?编辑:我不能在我的评论中的括号后面放上这些是奇怪的文件名:Windows文件名几乎总是有一种文件类型。你确定它们不是
文件(1.txt
文件(2.txt
文件(3.txt
等等)或类似的东西吗?