2010-04-05 90 views
1

我有一个不同的文件夹我想在Perl重命名文件,我一直在寻找一个解决方案早些时候,显示是这样的:重命名使用Perl文件

#rename 
for (<C:\\backup\\backup.rar>) { 
    my $file = $_; 
    my $new = $file . 'backup' . $ts . '.rar'; 
    rename $file, $new or die "Error, can not rename $file as $new: $!"; 
} 

然而backup.rar处于不同的文件夹,我尝试在上面的<>中放置“C:\ backup \ backup.rar”,但是我得到了同样的错误。

C:\Program Files\WinRAR>perl backup.pl 
String found where operator expected at backup.pl line 35, near "$_ 'backup'" 
     (Missing operator before 'backup'?) 
syntax error at backup.pl line 35, near "$_ 'backup'" 
Execution of backup.pl aborted due to compilation errors. 

我用

# Get time 
my @test = POSIX::strftime("%m-%d-%Y--%H-%M-%S\n", localtime); 
print @test; 

为了得到当前的时间,但我似乎不能将其正确到达rename

我能做些什么来解决这个问题?请注意我正在窗口框上做这个。

+1

是的,这是重命名命令的已知和记录的限制。 – 2010-04-05 19:11:15

+3

@Paul我有点困惑:**正是'rename'函数的一个已知限制? – 2010-04-05 19:21:30

回答

2

注重实际的错误信息。看看行:

my $new = $_ 'backup'. @test .'.rar'; 

如果你想进行插补$_内容和阵列@test成这样一个字符串,你需要使用:

my $new = "${_}[email protected]"; 

,但我有一个很难做那种感觉。

现在,strftime返回标。为什么不使用:

my $ts = POSIX::strftime("%m-%d-%Y--%H-%M-%S", localtime); 
my $new = sprintf '%s%s%s.rar', $_, backup => $ts; 

顺便说一句,你可能最终使您的生活更简单,如果你先放时间戳和格式它作为YYYYMMDD-HHMMSS,以便有没有关于哪个混乱迄今为止04-05-2010指。

1

线

my $new = $_ 'backup'. @test .'.rar'; 

也许应该读

my $new = $file . 'backup' . @test . '.rar'; 

(你失踪一个连接符,它是更清晰的不是重用$_那里之前使用来自行命名变量.. 。)

+0

对不起 - 我在同一时间输入了与你同样的答案。我甚至以同样的方式格式化它。 D'哦。 – MJB 2010-04-05 19:36:15

+0

伟大的思想人士相似,傻瓜很少有不同。 :-) – 2010-04-05 20:40:21

+0

这很好,但是,我得到的错误,我们不能重命名文件。 错误,无法将C:\ backup \ backup.rar重命名为C:\ backup \ backup.rarbackup04-05-20 10--16-07-12.rar:没有这样的文件或目录在backup.pl第37行。 – perlnoob 2010-04-05 23:09:04

0

我想你错过了字符串连接符号。 (期):

my $new = $_ 'backup'. @test .'.rar'; 

应该

my $new = $_ . 'backup' . @test . '.rar'; 
0

小侧的问题,但你并不需要

for (<C:\\backup\\backup.rar>) { 
    my $file = $_; 
    ..... 
} 

< >结构将是有益的,如果你在不断地扩大通配符但你不是。 要周到这段代码的未来读者(你一年!)和写

my $file = 'C:\backup\backup.rar' ; 

注单引号这doen't展开反斜杠。

+0

感谢您的建议!我继续前进并做出改变。 – perlnoob 2010-04-06 15:17:08