260字符限制,Get-ChildItem

时间:2016-08-17 12:58:21

标签: powershell

我知道win32有260个字符的限制,但我很好奇为什么我的代码半工作。见下文。

$Age_of_Files = -30
$Path = '\\share\d$\share'

$Age_of_Files = -30

$Current_Date = Get-Date

$Del_date = $Current_Date.AddDays($Age_of_Files)

$post = "<BR><i>Report generated on $((Get-Date).ToString())</i>"

Get-ChildItem $Path -Recurse |
    Where-Object { $_.LastWriteTime -lt $Del_date} |
    Select Name, FullName, LastWriteTime 

$Data | ConvertTo-HTML -PreContent $pre -PostContent $post | Out-File $Report

Invoke-Item $Report

Read-Host 'Have you checked the Output File...Ok to Continue with Delete?' | Out-Null

这将检查我的网络共享没有问题并且没有给我任何错误,虽然有很多目录超过260个字符,但我也想将其导出为HTML文件,所以如果我改变这行代码。

 $Data = Get-ChildItem $Path -Recurse |
         Where-Object { $_.LastWriteTime -lt $Del_date } |
         Select Name, FullName, LastWriteTime 

然后它不会递归目录,并给出了字符限制错误。

有解决方法吗?除了将其导出为HTML并添加实际的删除命令之外,我认为我几乎就在那里。

2 个答案:

答案 0 :(得分:1)

您可以在Windows 10中打开长路径。有一个gpo。  https://www.howtogeek.com/266621/how-to-make-windows-10-accept-file-paths-over-260-characters/

答案 1 :(得分:0)

这是Win32 API的limitationsee also)。有一个PowerShell Module据说可以解决这个问题(尽管我自己没有使用它)。

一个常见的解决方法是通过subst驱动器号的最长可访问路径来缩短路径

& subst X: C:\longest\parent\folder

在驱动器X:上工作,然后删除临时驱动器:

& subst X: /d

对于网络路径,使用net use到同一端:

& net use X: \\server\share\longest\parent\folder
...
& net use X: /d