Tôi cần phải nhận được kích thước của một thư mục, đệ quy. Tôi phải làm điều này mỗi tháng vì vậy tôi muốn thực hiện một kịch bản PowerShell để làm điều đó.Kịch bản PowerShell để Nhận một Thư mục Tổng Kích thước
Tôi có thể làm như thế nào?
Tôi cần phải nhận được kích thước của một thư mục, đệ quy. Tôi phải làm điều này mỗi tháng vì vậy tôi muốn thực hiện một kịch bản PowerShell để làm điều đó.Kịch bản PowerShell để Nhận một Thư mục Tổng Kích thước
Tôi có thể làm như thế nào?
Hãy thử như sau
function Get-DirectorySize() {
param ([string]$root = $(resolve-path .))
gci -re $root |
?{ -not $_.PSIsContainer } |
measure-object -sum -property Length
}
Điều này thực sự tạo ra một chút của một đối tượng tóm tắt mà sẽ bao gồm các Tính của các mặt hàng. Bạn chỉ có thể lấy tài sản Sum dù và điều đó sẽ là tổng độ dài
$sum = (Get-DirectorySize "Some\File\Path").Sum
EDIT Tại sao công việc này?
Hãy chia nhỏ các thành phần của đường ống. Lệnh gci -re $root
sẽ nhận tất cả các mục từ thư mục bắt đầu $root
đệ quy và sau đó đẩy chúng vào đường ống. Vì vậy, mỗi tệp và thư mục dưới $root
sẽ chuyển qua biểu thức thứ hai ?{ -not $_.PSIsContainer }
. Mỗi tệp/thư mục khi được chuyển đến biểu thức này có thể được truy cập thông qua biến số $_
. Trước đó ? cho biết đây là biểu thức lọc có nghĩa là chỉ giữ giá trị trong đường ống đáp ứng điều kiện này. Phương thức PSIsContainer sẽ trả về true cho các thư mục. Vì vậy, có hiệu lực biểu thức lọc chỉ giữ các giá trị tệp. Đối tượng đo lường cmdlet cuối cùng sẽ tổng giá trị của thuộc tính Length trên tất cả các giá trị còn lại trong đường ống. Vì vậy, nó chủ yếu gọi Fileinfo.Length cho tất cả các tập tin theo thư mục hiện hành (đệ quy) và tổng hợp các giá trị.
Nếu bạn quan tâm đến việc bao gồm kích thước tệp ẩn và hệ thống thì bạn nên sử dụng tham số-force với Get-ChildItem.
Dưới đây là cách nhanh chóng để có được kích thước của phần mở rộng tập tin cụ thể:
(gci d:\folder1 -r -force -include *.txt,*.csv | measure -sum -property Length).Sum
Nhờ có những người được đăng ở đây. Tôi đã sử dụng kiến thức để tạo điều này:
# Loops through each directory recursively in the current directory and lists its size.
# Children nodes of parents are tabbed
function getSizeOfFolders($Parent, $TabIndex) {
$Folders = (Get-ChildItem $Parent); # Get the nodes in the current directory
ForEach($Folder in $Folders) # For each of the nodes found above
{
# If the node is a directory
if ($folder.getType().name -eq "DirectoryInfo")
{
# Gets the size of the folder
$FolderSize = Get-ChildItem "$Parent\$Folder" -Recurse | Measure-Object -property length -sum -ErrorAction SilentlyContinue;
# The amount of tabbing at the start of a string
$Tab = " " * $TabIndex;
# String to write to stdout
$Tab + " " + $Folder.Name + " " + ("{0:N2}" -f ($FolderSize.Sum/1mb));
# Check that this node doesn't have children (Call this function recursively)
getSizeOfFolders $Folder.FullName ($TabIndex + 1);
}
}
}
# First call of the function (starts in the current directory)
getSizeOfFolders "." 0
Tốt. (Get-DirectorySize "Một số \ File \ Path") Sum/1mb hoặc (Get-DirectorySize "Một số \ File \ Path") Sum/1gb để chuyển đổi sang megs hoặc biểu diễn. – aphoria
Bạn có thể giải thích cách hoạt động không? –
@Gauenwolf, đã thêm bản chỉnh sửa để giải thích – JaredPar