2011-06-02 58 views
1

我試圖編寫一個非常簡單的腳本,將文件從幾臺遠程計算機複製到我的電腦。我在perl中編寫了以下代碼:perl「系統」腳本的問題

@Comps = ("comp1","comp2","comp3","comp4"); 

foreach $comp (@Comps) 
{ 
    system("copy /Y \\\\$comp\\c\$\\myfolder\\$comp*.log C:\\Program Files\\My Cont Folder\\input\\"); 
} 

我得到一個語法錯誤,不能理解爲什麼。

謝謝!

回答

1

看起來你在命令本身有錯誤,因爲perl代碼運行良好。 (因爲我在Unix上給了我4次「找不到的命令」)。

我建議使用system()調用的列表形式:system("copy", "/Y", $src, $dst);,並且可能還要使用sprintf()來填充$ src和$ dst。

當然,您可以始終通過在system之前運行print來檢查究竟執行了什麼。我經常猶豫並經常印刷。

2

鑑於Perl將字符傳遞給shell的情況,shell將處理"C:\Program Files"作爲一個參數的唯一方法是在其周圍放置雙引號。 (或者有時候只是一個雙引號前面的話)

所以,你可能需要一些更多的反斜槓(所以我QQ-ED吧):

system(qq{cmd /c copy /Y \\\\$comp\\c\$\\myfolder\\$comp*.log "C:\\Program Files\\My Cont Folder\\input\\"}) 
+0

看起來你已經在你的字符串中有%s和$ comp了。 – Dallaylaen 2011-06-02 14:11:53

1

Perl和窗戶路徑不拌勻,爲什麼不使用File::Copy呢?

use File::Copy; 
copy($file1,$file2) or die "Copy failed: $!"; 

然後,您可以改爲在路徑中使用正斜槓。更容易。

+0

你實際上可以在Windows路徑中始終使用正確的('/')斜線。即使有良好的「開放式」酒。 – daotoad 2011-06-02 19:03:38

+0

@daotoad是的,我知道你可以在Perl中,但我不知道我可以在Windows cmd中使用它們。 – TLP 2011-06-02 21:33:30