我在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在不同的文件夹中,我确实尝试在&lt;&gt;中放入“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。
我该怎么做才能解决这个问题?请注意我在窗户框上这样做。
答案 0 :(得分:2)
注意实际的错误信息。看看这一行:
my $new = $_ 'backup'. @test .'.rar';
如果要将$_
和数组@test
的内容插入到这样的字符串中,则需要使用:
my $new = "${_}backup@test.rar";
但我很难理解这一点。
现在,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}}所指的日期。
答案 1 :(得分:1)
该行
my $new = $_ 'backup'. @test .'.rar';
可能应该阅读
my $new = $file . 'backup' . @test . '.rar';
(你错过了一个连接运算符,使用该行中的命名变量比在那里重用$_
更明确...)
答案 2 :(得分:0)
我想你错过了字符串concat符号。 (期间):
my $new = $_ 'backup'. @test .'.rar';
应该是
my $new = $_ . 'backup' . @test . '.rar';
答案 3 :(得分:0)
轻微的问题,但你不需要
for (<C:\\backup\\backup.rar>) {
my $file = $_;
.....
}
如果您正在扩展通配符,那么< >
构造将非常有用,但您不是。
对这段代码的未来读者深思熟虑(你在一年之内!)并写下
my $file = 'C:\backup\backup.rar' ;
请注意不会扩展反斜杠的单引号。