经过一天的突击和不断的摸索,感谢CCTV、MTV,终于找到了一个俺很需要的例子,这就应了那句话了,“例子才是王道啊”。
一下是小弟写的一个文件批处理的脚本,通过两天的时间(我倍感惭愧,两天就写了这么点东西)。简单说下吧,其目的主要是为了:
需要处理的文件夹->打开此文件夹->读取子文件夹名称(例如:东1、东2、东3、西1、西2)->将首字母相同的文件夹copy到以该首字母开头的文件夹中(例如:将“东1、东2、东3”copy到“东”的文件夹中)另外要在数据库中做下处理,这里不就贴出来了。代码如下:
#!/usr/bin/perl -W
#
# File: file_edit.pl
# Author: 赵振钧
# License: GPL-2
use strict;
use warnings;
use File::Copy;
#设定系统当前路径
my $file_path="F:/测试";
local *wbwj_dir;
local *sjwj_dir;
local *KTXXWD;
foreach my $wjcl_dir($file_path)
{
#打开目录
opendir(KTXXWD,$wjcl_dir)||die"error, can't open the dir";
print $wjcl_dir."/n";
#读取目录下子目录信息
my @dir = readdir KTXXWD;
#对每一个子目录进行筛选
foreach my $file (@dir)
{
#如果目录名为3个连续的字母,说明是需要处理的目录
if ($file =~ /[a-z]{3}/)
{
#打开符合条件的子目录文件夹
opendir(sjwj_dir, $wjcl_dir."/".$file)||die"error, can't open the dir ";
#读取子目录文件夹下的文件
my @dir1 = grep(!/.*/..*/i,readdir sjwj_dir);#正则表达式,过滤掉目录列表中的".",".."
#对每一个子目录进行筛选
foreach my $file_var (@dir1)
{
#如果子文件夹的首字母存在与目录中
#拷贝文件夹到对应的文件首字母目录中
my $original = $wjcl_dir."/".$file."/".$file_var;
opendir(wbwj_dir,$original)||die"error, can't open the dir";
my @external_files = readdir wbwj_dir;
my $file_first = substr($file_var,0,2);
if(!(-e $file_first) and length($file_var) > 2)
{
#如果本地路径不存在,则创建
mkdir($wjcl_dir."/".$file."/".$file_first)||die"can not create dir_first:".$wjcl_dir."/".$file."/".$file_first."/n";
}
if(!(-e $file_first."/".$file_var) and length($file_var) > 2)
{
#如果本地路径不存在,则创建
mkdir($wjcl_dir."/".$file."/".$file_first."/".$file_var)||die"can not create dir_var:$wjcl_dir."/".$file."/".$file_first."/".$file_var";
}
foreach my $external_file (@external_files)
{
if(length($external_file) > 2)
{
my $old_copy = $original."/".$external_file;
my $new_copy = $wjcl_dir."/".$file."/".$file_first."/".$file_var;
if(length($file_var) > 2)
{
#如果本地路径不存在,则创建
#print "file_var=".$file_var."/n";
#print "file_first2=".$file_first."/n";
#拷贝文件到本地目录下
copy($old_copy, $new_copy) or die "Copy failed: $!";
print "Copy the file,from $original to $new_copy/n";
}
}
}
closedir(wbwj_dir);
}
}
#closedir(sjwj_dir);
print "/n";
}
closedir(KTXXWD)
};