проблемы с "системным" скриптом на Perl - PullRequest
1 голос
/ 02 июня 2011

Я пытаюсь написать очень простой скрипт, который копирует файлы с нескольких удаленных компьютеров на мой компьютер. Я написал следующее в 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 ]

2 голосов
/ 02 июня 2011

Учитывая случай, когда Perl передает символы в оболочку, единственный способ, которым оболочка будет обрабатывать "C:\Program Files" в качестве одного аргумента, - заключать в нее двойные кавычки.(Или иногда только с одной двойной кавычкой перед ней.)

Так что вам может потребоваться еще несколько обратных слешей (поэтому я задал вопрос)

system( qq{cmd /c copy /Y \\\\$comp\\c\$\\myfolder\\$comp*.log "C:\\Program Files\\My Cont Folder\\input\\"} )
1 голос
/ 02 июня 2011

Пути Perl и Windows не очень хорошо сочетаются, почему бы не использовать File :: Copy вместо?

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

И тогда вы можете использовать косую черту в своих путях. Гораздо проще.

1 голос
/ 02 июня 2011

Похоже, у вас есть ошибка в самой команде, потому что код perl работает нормально. (Дала мне 4 раза "команда не найдена", так как я на Unix).

Я бы предложил использовать форму списка вызова system (): system("copy", "/Y", $src, $dst); и, возможно, даже sprintf () для заполнения $ src и $ dst.

Конечно, вы всегда можете проверить, что именно выполняется, запустив print до system. Я часто стесняюсь и часто печатаю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...