我正在尝试编写一个非常简单的脚本,将来自多台远程计算机的文件复制到我的计算机上。我在perl中写了以下内容:
@Comps = ("comp1","comp2","comp3","comp4");
foreach $comp (@Comps)
{
system("copy /Y \\\\$comp\\c\$\\myfolder\\$comp*.log C:\\Program Files\\My Cont Folder\\input\\");
}
我收到语法错误,无法理解原因。
谢谢!
答案 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: $!";
然后您可以在路径中使用正斜杠。更容易。