我知道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并添加实际的删除命令之外,我认为我几乎就在那里。
答案 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的limitation(see 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