1
我發現一個無論路徑大小如何都會返回所有文件的cmdlet。我想知道是否有一個等價的命令獲得所有的文件夾,而不管路徑大小嗎?Get-FolderItem版本獲取所有文件夾
Get-FolderItem
結合ROBOCOPY和PowerShell,甚至返回所有這些文件的路徑大於260
反正是有得到所有的文件夾中的文件共享
我發現一個無論路徑大小如何都會返回所有文件的cmdlet。我想知道是否有一個等價的命令獲得所有的文件夾,而不管路徑大小嗎?Get-FolderItem版本獲取所有文件夾
Get-FolderItem
結合ROBOCOPY和PowerShell,甚至返回所有這些文件的路徑大於260
反正是有得到所有的文件夾中的文件共享
Get-FolderItem
使用robocopy
開關/NDL
排除目錄從日誌輸出,它用來抓取文件信息。它還使用/S
開關遞歸而非/E
避免空文件夾簡單地改變從$params
變量:
$params.AddRange(@("/L","/S","/NJH","/BYTES","/FP","/NC","/NDL","/TS","/XJ","/R:0","/W:0"))
到
$params.AddRange(@("/L","/E","/NJH","/BYTES","/FP","/NC","/NFL","/TS","/XJ","/R:0","/W:0"))
現在的Robocopy將列出目錄,而不是文件。由於目錄的輸出與文件有所不同,因此您還必須稍微更改解析邏輯。
變化
If ($_.Trim() -match "^(?<Size>\d+)\s(?<Date>\S+\s\S+)\s+(?<FullName>.*)") {
$object = New-Object PSObject -Property @{
ParentFolder = $matches.fullname -replace '(.*\\).*','$1'
FullName = $matches.FullName
Name = $matches.fullname -replace '.*\\(.*)','$1'
Length = [int64]$matches.Size
LastWriteTime = [datetime]$matches.Date
Extension = $matches.fullname -replace '.*\.(.*)','$1'
FullPathLength = [int] $matches.FullName.Length
}
$object.pstypenames.insert(0,'System.IO.RobocopyDirectoryInfo')
Write-Output $object
}
到
If ($_.Trim() -match "^(?<Children>\d+)\s+(?<FullName>.*)") {
$object = New-Object PSObject -Property @{
ParentFolder = $matches.fullname -replace '(.*\\).*','$1'
FullName = $matches.FullName
Name = $matches.fullname -replace '.*\\(.*)','$1'
}
$object.pstypenames.insert(0,'System.IO.RobocopyDirectoryInfo')
Write-Output $object
}
而且應該這樣做