2010-04-05 88 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