朋友有一文件夾,全部是EML文件,約20G。他需要把這20G文件按每個文件夾2G分成10個。于是乎寫了以下腳本:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
#目標文件夾 $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個目錄。