perl“系统”脚本的问题

时间:2011-06-02 09:02:46

标签: perl syntax

我正在尝试编写一个非常简单的脚本,将来自多台远程计算机的文件复制到我的计算机上。我在perl中写了以下内容:

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

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

我收到语法错误,无法理解原因。

谢谢!

3 个答案:

答案 0 :(得分: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\\"} )

答案 1 :(得分:1)

看起来你的命令本身有错误,因为perl代码运行正常。 (给我4次“命令未找到”,因为我在Unix上)。

我建议使用list()调用的列表形式:system("copy", "/Y", $src, $dst);,甚至sprintf()来填写$ src和$ dst。

当然,您可以在print之前运行system来检查确切执行的内容。我经常犹豫,经常打印。

答案 2 :(得分:1)

Perl和Windows路径混合得不好,为什么不使用File::Copy呢?

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

然后您可以在路径中使用正斜杠。更容易。