Powershell 获取FolderItem版本以获取所有文件夹
我发现了一个cmdlet,它返回所有文件,而不考虑路径大小。我想知道是否有一个同等的命令可以获取所有文件夹,而不考虑路径大小 结合robocopy和powershell返回所有文件,即使是路径大于260的文件Powershell 获取FolderItem版本以获取所有文件夹,powershell,robocopy,Powershell,Robocopy,我发现了一个cmdlet,它返回所有文件,而不考虑路径大小。我想知道是否有一个同等的命令可以获取所有文件夹,而不考虑路径大小 结合robocopy和powershell返回所有文件,即使是路径大于260的文件 是否仍要获取文件共享中的所有文件夹get FolderItem使用robocy开关/NDL从日志输出中排除目录,它使用这些目录获取文件信息。它还通过使用/S开关递归而不是/E来避免空文件夹 只需将$params变量更改为: $params.AddRange(@("/L","/S","/NJ
是否仍要获取文件共享中的所有文件夹
get FolderItem
使用robocy
开关/NDL
从日志输出中排除目录,它使用这些目录获取文件信息。它还通过使用/S
开关递归而不是/E
来避免空文件夹
只需将$params
变量更改为:
$params.AddRange(@("/L","/S","/NJH","/BYTES","/FP","/NC","/NDL","/TS","/XJ","/R:0","/W:0"))
$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“^(?\d+)\s(?\s+\s\s+)\s+(?*)”{
$object=新对象PSObject-属性@{
ParentFolder=$matches.fullname-替换“(.\\).*”,“$1”
FullName=$matches.FullName
Name=$matches.fullname-替换“.*\\(.*)”,$1
长度=[int64]$matches.Size
LastWriteTime=[datetime]$matches.Date
扩展名=$matches.fullname-替换“.*\”(.*)“,$1”
FullPathLength=[int]$matches.FullName.Length
}
$object.pstypenames.insert(0,'System.IO.RobocopyDirectoryInfo')
写入输出$object
}
到
如果($.Trim()-match“^(?\d+)\s+(?*)”{
$object=新对象PSObject-属性@{
ParentFolder=$matches.fullname-替换“(.\\).*”,“$1”
FullName=$matches.FullName
Name=$matches.fullname-替换“.*\\(.*)”,$1
}
$object.pstypenames.insert(0,'System.IO.RobocopyDirectoryInfo')
写入输出$object
}
这应该可以做到
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
}