0

所以我需要循环遍历数组中的一些文件,并将该行中包含的数量增加以下目录中的“)_Graph_S1.dat”文件的数量。接下来我需要用替换的数字将文件重命名为,这样如果下面的目录中有 44 个文件,plate0013 (44)_Graph_S1.dat就会变成这样。plate0013 (88)_Graph_S1.dat例如,我在目录中工作:plate0013\2nd run\. 我需要根据目录\2nd run\中“ )_Graph_S1.dat”文件的数量重命名目录中的文件plate0013

我正在使用 Windows 7 和草莓 perl。

我已经尝试了位于此处的代码:https ://stackoverflow.com/a/5029064/2060081 ,但我的输出没有改变。

我还没有弄清楚如何获取上一个目录中的文件计数,所以我一直使用填充器44,直到不再卡住为止。以下是我的代码的重要部分:

my @array = glob('*)_Graph_S1.dat');

foreach (@array) {
    my $in = $_;
    $in =~ s/(\d+)\)/$1+44/e;
    rename $_, %in;
}

我的问题是我需要在新名称中包含括号,但我无法弄清楚如何做到这一点。

我以前从未使用过正则表达式,自 1995 年以来我就没有使用 perl 编程。我的 google 技能让我失望了。感谢您的阅读和回复。

多亏了@TLP,我才知道为什么我的系统代码没有正确输出。但是我发现我的正则表达式有问题。我的文件被命名为plate 0013 (01)_Graph_S1.dat. 但它不包括新名称中的括号。

4

1 回答 1

0

假设@array包含来自的文件2nd run

use strict;
use warnings;

my @array = glob('*)_Graph_S1.dat');

# forcing list context => perldoc -f glob
my $number_of_files_in_dir_below = @{[ glob('../*)_Graph_S1.dat') ]};

foreach (@array) {
    my $in = $_;
    $in =~ s/(\d+)\)/$1+$number_of_files_in_dir_below .")"/e;
    rename $_, $in;
}
于 2013-09-10T06:44:31.797 回答