【问题标题】:260 Character Limit, Get-ChildItem260 个字符限制,Get-ChildItem
【发布时间】:2019-02-27 23:47:31
【问题描述】:

我知道 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 并添加实际的删除命令之外,我想我快到了。

【问题讨论】:

  • 我写了一个函数来绕过 260 个字符的限制:gallery.technet.microsoft.com/scriptcenter/…
  • 您好 Boeprox,非常感谢您分享您的代码,我认为这就是答案!但不幸的是,当我添加变量 $Date = Get-ChildItem2 时它没有做任何事情
  • 你能扩展一下吗?添加变量是什么意思?当您不添加变量而只是“按原样”运行时会发生什么?在运行命令之前,你有没有点源文件来加载函数?
  • 嗨 Boeprox,是的,它可以在不添加 $Data 值的情况下正常工作,就像我的代码一样。但是为了能够将该数据导出到 HTML 文件中,我需要将数据添加到像这样的数组中 $Data = Get-ChildItem2 $Path -Recurse | Where-Object { $_.LastWriteTime -lt $Del_date } | Select Name, FullName, LastWriteTime 这然后会阻止您的代码执行,它什么也不做。使用前面的代码,我开始收到 260 个字符限制错误。我确实在运行命令之前加载了函数。
  • 我尝试运行您在评论中提供的代码,但无法重现您所描述的代码停止执行的问题。只需添加 $Data 以保存输出不应阻止命令执行。像这样运行它,看看会发生什么:$Data = Get-ChildItem2

标签: powershell


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    这是 Win32 API (see also) 的 limitation。有一个 PowerShell Module 据说可以解决这个问题(虽然我自己没有使用过)。

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

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

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

    & subst X: /d
    

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

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

    【讨论】:

    • 您好 Ansgar,谢谢您的回答,我确实尝试过使用 Net Use,但不幸的是有很多很多子文件夹,它没有用。我开始认为我需要采取不同的方法。
    • “没有工作”不包含足够的调试信息。
    • 目录长度仍然太长,即使缩短了它。
    • 再次缩短。并用线索棒击中任何创造了这么长路径的人。
    • 为了避免混淆,我所说的“最长父文件夹”当然是指不超过 260 个字符限制的最长路径。
    猜你喜欢
    • 1970-01-01
    • 2012-10-26
    • 2014-03-04
    • 2021-12-19
    • 2013-04-29
    • 1970-01-01
    • 2014-05-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多