朋友有一文件夾,全部是EML文件,約20G。他需要把這20G文件按每個文件夾2G分成10個。于是乎寫了以下腳本:
#目標文件夾$scrfile = "d:/test"#起始目錄名$directory = 0#1825361100#76547428#判斷當目錄的文件數大于0時while循環為真while( (dir -Path $scrfile -Filter *.eml ).count -gt 0){ #起始目錄名為1 $directory++#建立目錄 New-Item -Path "d:/$directory" -ItemType Directory -ErrorAction Stop#累加大小變量 $length = 0#dir配合where-object移動文件到新目錄,記錄大小,當大小達到指定大小,跳出管道. dir -Path $scrfile -Filter *.eml |Where-Object{ $objName = $_.Name $_.moveto("d:/$directory/$objName") $length += $_.length if($length -gt 1825361100) { continue } }}
注意dir在這里最好用where-object,而不要用foreach。
這樣一來,朋友約4W份的EML郵件文件夾,瞬間在2秒鐘分成了10個目錄。
新聞熱點
疑難解答