BAT实现文件满4个G时自动生成一个文件夹

omanik 2023-3-19 156 3/19

背景如下

当时公司有个需求需要刻盘,文件大小为370G,全部都是录音,但是刻盘DVD一张只能存4.7G,而实际使用中最好不要超过4.1G,370G如果手动分的话就非常累了,所以有了如下BAT,它的作用非常简单,就是当文件满4个G的时候自动生成一个文件夹并转移进去。

<# :
cls&echo off&cd /d "%~dp0"&mode con lines=5000&rem bat存为ANSI/GB2312编码
set "self=%~f0"
echo;waiting……
powershell -NoProfile -ExecutionPolicy bypass "Get-Content -literal '%~f0'|Out-String|Invoke-Expression"
echo;done
pause
exit
#>
$specific=4*1073741824;
$index=1;
$prefix="文件夹";
$self=get-item -literal $env:self;
$current=$self.Directory.FullName.trimend('\');
$size=0;$foldername=$prefix+$index.toString();
$newfolder=$current+'\'+$foldername;
if(-not (test-path -literal $newfolder)){[void][IO.Directory]::CreateDirectory($newfolder);}
$files=@(dir -literal $current|?{($self.Name -ne $_.Name) -and ($_ -is [System.IO.FileInfo])});
for($i=0;$i -lt $files.length;$i++){
    write-host ($files[$i].Name+' --> '+$foldername);
    $newfile=$newfolder+'\'+$files[$i].Name;
    move-item -literal $files[$i].FullName $newfile -force -ErrorAction SilentlyContinue;
    $size=$size+$files[$i].length;
    if($size -ge $specific){
        $size=0;
        $index++;
        if(($i+1) -lt $files.length){
            $foldername=$prefix+$index.toString();
            $newfolder=$current+'\'+$foldername;
            if(-not (test-path -literal $newfolder)){[void][IO.Directory]::CreateDirectory($newfolder);}
        }
    }
}

 

- THE END -
Tag:

omanik

3月19日15:36

最后修改:2023年3月19日
0

非特殊说明,本博所有文章均为博主原创。

共有 0 条评论