我们有一些网络共享,我每天都会接到用户的支持电话,说文件路径太长。我建议使用短文件夹名称,避免深度嵌套,但我的用户总是有理由使用冗长的名称。他们需要非常长的文件夹名称,并详细描述内容。有时他们只是在相应的网络子文件夹中解压其他人创建的文件,他们甚至没有注意到名称非常长。
文件系统是一种非常简单实用的存档文件的方法,但也许这并不是他们真正需要的。抽象层可以提供帮助,将冗长、冗长且令人回味的名称映射到文件夹和文件。可以使用数据库或简单的 excel 文件来实现,但这似乎有点过头了,尤其是如果更新映射的任务留给用户的话。
有一个应用程序,激光多普勒超声诊断仪,用于扫描长文件路径。我从未使用过它,但也许可以将其放入脚本中以通知文件所有者,这样他就可以在出现任何问题之前重命名或移动文件夹。
还有其他方法可以解决这个问题吗?
请考虑到我们有一个异构的 Windows 域,因此我们不能超过大约 250 个字符的“旧”限制。
更新
我读了推荐的帖子,但我已经意识到没有实际的方法可以克服这个限制。我正在寻找可以缓解这个问题的工具和程序。我们有一些文件夹名称超过 100 个字符。有没有简单的替代方法来存储这些信息?
答案1
激光多普勒超声诊断仪确实看起来 90% 适合你的问题。
TLPD 的主要问题是它只能为您创建日志文件。
在我看来,我认为列出文件并找出哪些路径太长的任务最终与解析该日志文件一样复杂。
因此,我建议使用 PowerShell 来获取递归列表,过滤太长的名称,浏览结果列表,获取文件所有者,然后发送给他们邮件。
这些步骤都很简单而且很流行,所以 Google 上有很多关于每个步骤的信息。把这些部分组合在一起,最坏的情况也不过是一篇 stackoverflow 帖子而已 :)
仅过滤长路径名(这看起来很有趣):https://powershell.org/forums/topic/script-to-find-long-path-names/
另一个可能有用的搜索结果:https://stackoverflow.com/questions/12697259/how-do-i-find-files-with-a-path-length-greater-than-260-characters-in-windows(滚动查看 powershell 答案)
如何获取文件的所有者:https://stackoverflow.com/questions/42193597/get-file-owner-author
绝对不能要求 Windows 提供“最后修改用户”:https://www.vistax64.com/threads/finding-who-modified-a-file.60668/
发送电子邮件的参考文档(这部分可能很有趣)https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/send-mailmessage?view=powershell-6
最后,简单的部分,自动运行你的脚本:https://community.spiceworks.com/how_to/17736-run-powershell-scripts-from-task-scheduler
也许运行 Windows 的人可能会提供更好的答案,实际上实现其中的部分/全部内容。:)
答案2
小心 TLPD!
我最近才开始在 Windows 2016 机器上使用 TLPD v4.6。我们合并了 2 个组织,总共 9TB 的数据迁移被分成了大约 1.5TB 的块。
我们使用 Robocopy 来复制数据,因为它应该处理长文件名,所以我创建了一些长目录名,如“1 the quick brown fox jumps over the lazy dog”,并将其复制到“2 the quick brown...”中,每个目录 46 个字符来测试 robocopy。问题是长路径上有很多目录,但没有文件 - 所以 TLPD 通知了我
因此,在家里的 Windows 10 盒子版本 10.0.18362 Build 18362 上,再次在我创建的文件夹上使用 TLPD。
c:\temp\1 the quick brown dog jumps over the lazy dog\2 the quick brown dog jumps over the lazy dog\3 ...
其中 5 个,阈值为 240 个字符,表示 242 目录。C:\temp\5 the quick brown 将 5 复制到第 6 个,您将获得 242 目录。C:\temp\6 the quick brown < 它已停止计数并切断“**1** the quick brown...”因此横跨了 7 个级别?
如果我的文件夹创建此路径“C:\temp\8\7\6\5\4\3\2\1”并选择阈值 6(或 10),它会生成
11 dir. C:\temp\8\7 < Where are the missing folder?
因此我创建了两个我自己的长名称文件夹。仅使用 Windows 10 资源管理器,没有花哨的软件或插件,这就是我的结果。
Length Type Full Path Name
245 dir. D:\temp\this is a very log folder will all good men come to
the aid of the party the quick brown fox jumped over the dog\Hong Kong
leader Carrie Lam open to the possibility of overhauling cabinet when
protest crisis dies down Bernie Sanders Adds
=== TLPD finished ===.
如果我运行下面的 powershell 命令,我会得到下面的输出,显示 TDLP 错过了最大的文件夹。如果我将阈值设为 100,它会错过两个最大的文件夹。
247 : D:\temp\this is a very log folder will all good men come to the aid
of the party the quick brown fox jumped over the dog\Hong Kong leader
Carrie Lam open to the possibility of overhauling cabinet when protest
crisis dies down Bernie Sanders Adds\A
245 : D:\temp\this is a very log folder will all good men come to the aid
of the party the quick brown fox jumped over the dog\Hong Kong leader
Carrie Lam open to the possibility of overhauling cabinet when protest
crisis dies down Bernie Sanders Adds
149 : D:\temp\Angry over Brexit, thousands gather in London demanding new
referendum Why This Nebraska Democrat Thinks She Can Get Elected In Trump
Country
120 : D:\temp\this is a very log folder will all good men come to the aid
of the party the quick brown fox jumped over the dog
如果我创建非常长的嵌套文件夹,TLPD 会再次将路径识别为 247,但其实际长度为 572。在工作中我得到了更好的结果,但现在认为可能缺少了某些内容,而且太不一致了。
Get-ChildItem -Path $pathToScan -Recurse -Force | Select-Object -Property
FullName, @{Name="FullNameLength";Expression={($_.FullName.Length)}} |
Sort-Object -Property FullNameLength -Descending | ForEach-Object {
$filePath = $_.FullName
$length = $_.FullNameLength
$string = "$length : $filePath"
# Write to the Console.
if ($writeToConsoleAsWell) { Write-Host $string }
#Write to the file.
$stream.WriteLine($string)
}