实现功能
1.遍历源目录。
2.将源目录文件复制至目标目录。
3.当每次(每循环)复制达到$file_count时,休眠$sleep_time秒。
4.继续复制、休眠,循环到全部文件被复制完毕。
5.程序不会校验文件是否会被真的复制成功。
6.程序不会校验原始目录中的文件格式,会复制全部文件,但不包括目录。
Github地址
源码
<#
By YeQiyu
Date 20210622
#>
<#
更新日志
v1.0
By YeQiyu
Date 20210622
1.遍历源目录。
2.将源目录文件复制至目标目录。
3.当每次(每循环)复制达到$file_count时,休眠$sleep_time秒。
4.继续复制、休眠,循环到全部文件被复制完毕。
5.程序不会校验文件是否会被真的复制成功。
6.程序不会校验原始目录中的文件格式,会复制全部文件,但不包括目录。
程序会在日志路径文件生成两种文件。
1.源目录文件列表:记录源目录文件名称
2.日志文件:记录程序执行过程(不包括具体文件的复制记录)
v1.1
20210623
1.调整了方法定义顺序。先定义方法,后进行调用。
2.修正了log方法未设置path的问题。
3.遍历文件时,增加了日志输出。每读取N个文件打印1次日志。
#>
###############配置区域###############
#每次复制文件数量(默认值2000)
$file_count = 2000
#到达每次复制文件数量后休眠时间(单位秒。默认值60秒)
$sleep_time=20
#原始目录
$source_dir='F:\源目录';
#目标目录
$dest_dir='D:\目标目录';
#日志文件路径
$log_dir='D:\日志目录';
#遍历文件时,每读取N个文件打印1次日志。(默认值1000)
$file_check_count=1000;
###############配置区域###############
###############程序区域###############
$today=Get-Date;
$now = $today.ToString('yyyyMMddHHmmss');
$file_record_name=$log_dir+"\"+$now+".txt";
$log_file=$log_dir+"\log_"+$now+".log";
###############通用方法定义###############
#输出日志信息至文件
function log_write
{
Param
(
$log_file,
$log_string
)
$today=Get-Date
$now = $today.ToString('yyyy-MM-dd HH:mm:ss')
Write-Host($now+" "+$log_string);
Add-Content -path $log_file -value $now" "$log_string;
}
function file_record
{
Param
(
$log_file,
$log_string
)
Add-Content -Path $log_file -value $log_string
}
#输出日志
function log
{
Param
(
$log_string
)
log_write -log_file $log_file -log_string $log_string
}
###############通用方法定义###############
log -log_string "读取配置开始";
log -log_string 启动批次:$now;
log -log_string 原始目录:$source_dir;
log -log_string 目标目录:$dest_dir;
log -log_string "开始遍历原始目录,生成文件列表!";
$file_count=1;
#生成文件列表
Get-ChildItem $source_dir |ForEach-Object -Process{
if($file_count % $file_check_count -eq 0){
log -log_string 已读取文件:$file_count;
}
$file_count++;
if($_ -is [System.IO.FileInfo])
{
file_record -log_file $file_record_name -log_string $_;
}
}
log -log_string 文件列表生成完毕!共 $file_count 个待复制文件。列表文件名称:$file_record_name;
#复制文件
$file_list=Get-Content $file_record_name;
$count = 1;
foreach ($file in $file_list)
{
if($count % $file_count -eq 0){
log -log_string 复制文件数量已达到$file_count" "休眠$sleep_time""秒
Start-Sleep -s $sleep_time
}
Copy-Item -Path $source_dir"\"$file -Destination $dest_dir
$count++;
}
log -log_string 文件复制完毕!
###############程序区域###############