PowerShell - 批量文件延迟复制

实现功能

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 文件复制完毕!



###############程序区域###############

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山水牧羊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值