我正在创建一个Perl脚本来部署webcode(Windows 2008 Server)。我需要先复制目标文件夹中的所有旧文件,然后为存档目录名称(arc_dir.20131217)上带有时间戳的文件创建存档目录。将文件移动到存档中。然后我需要将源目录中的代码复制到目标文件夹中。然而,它根本不起作用,我完全不知道为什么。
有两件事,我很快就会看到Perl,我很快就会有人为我做代码。这有点挫败了学习的目的。方向和对话会很棒。我是一个退伍军人的梦想,愿意学习,我只想写清洁代码。
use strict;
use warnings;
use autodie;
use File::Copy; #Gives you access to the "move" command
use File::Path; #Copies data recursively from one dir and creates a new dir
use POSIX;
#Set Directories
use constant {
TIMESTAMP => strftime("%Y%M%d%H%M%S", localtime);
Source_Dir => "C:\Users\Documents\Source_Dir",
destination_Dir => "C:\Users\Documents\Destination_Dir",
ARCHIVE => "C:\Users\Documents\arc_dir.TIMESTAMP",
};
#Creates new directory to archive old files
make_path('C:\Users\Shaun\Documents\arc_dir.TIMESTAMP');
#Need to copy destination dir, create archive dir and paste data to it
#Opens destination_Dir, so I can read from it
opendir my $dir, destination_Dir;
# Loop through directory and grab all of the files and store in var
while (my $file = readdir $dir) {
my $destination_Dir = destination_Dir . "/" . "$file";
move $destination_Dir, ARCHIVE;
#Loop through directory and copy all webcode to destination_Dir
opendir my $dir, Source_Dir;
while (my $file = readdir $dir) {
my $Source_Dir = Source_Dir . "/" . "$file";
move $Source_Dir, destination_Dir;
答案 0 :(得分:1)
脚本中存在一些语法错误。我会在命令行上使用-c到PERL来检查脚本的语法(例如perl -c)。请确保您的()和{}匹配。
另一项是当使用双引号(“)时需要使用反斜杠(\)转义反斜杠(\)。否则它只是转义字符串中的下一个字符(可能不是你的想要一个路径名。)双引号中的字符串在被处理之前进行插值,其中单引号不是(很好地解释了sinqle引号和双精度之间的区别:http://www.perlmonks.org/?node_id=401006)。你可能想要改变sinqle引用你必须在makepath调用中加双引号。否则TIMESTAMP将不会被更改,目录将具有名称TIMESTAMP。
我还建议加入一些打印声明来表明正在做什么,并提供项目正在进行的反馈。例如打印“移动$ destination_Dir到ARCHIVE”和“将$ Source_Dir移动到destination_Dir”会让你知道正在移动文件。