【问题标题】:Cataloging file names over 256 characters对超过 256 个字符的文件名进行编目
【发布时间】:2018-02-22 23:11:12
【问题描述】:

我是脚本(或任何类型的编码)的新手。我有一个问题,我想为目录目录和某些文件名生成 csv 文件以帮助我的工作。我能够将一些适合我需要的东西放在一起。除了一个例外,长名称返回以下错误:

错误:指定的路径、文件名或两者都太长。完全限定的文件名必须少于 260 个字符,目录名必须少于 248 个字符。

这是我的脚本:

Write-Host "Andy's File Lister v2.2"
$drive = Read-Host "R or Q?"
$client = Read-Host "What is the client's name as it appears on the R or Q drive?"
$path= "${drive}:\${client}"
Get-ChildItem $path -Recurse -dir | Select-Object FullName | Export-CSV $home\downloads\"$client directories.csv"
Get-ChildItem $path -Recurse -Include *.pdf, *.jp*, *.xl*, *.doc* | Select-Object FullName | Export-CSV $home\downloads\"$client files.csv"
Write-Host "Check your downloads folder."
Pause

正如我所说,我对此很陌生。我可以使用不同的命令,或者告诉脚本跳过一定长度的目录名或文件吗?

谢谢!

【问题讨论】:

  • 仅供参考:限制是旧限制。在 Windows 10 中,您可以通过策略设置启用长文件路径支持,这将解决问题。如果您使用的是旧版本,您可以使用 PInvoke 来获得对长文件路径的支持。

标签: powershell


【解决方案1】:

您可以检查您检查的每个项目的 .FullName 属性的 .Length 子属性的值,如果大于 256 个字符,请使用 Out-Null:

例如

$items = Get-ChildItem -Path C:\users\myusername\desktop\myfolder

foreach($item in $items)
{
     if($item.FullName.Length -lt 256)
     {
          do some stuff
     }
     elseif($item.FullName.Length)
     {
          Out-Null
     }
}

如果你也想检查父文件夹的路径,你可以检查

$item.Parent.FullName.Length

也在您的处理中。

【讨论】:

    【解决方案2】:

    我认为你应该关闭第 5 行和第 6 行的字符串。

    您应该使用\",而不是使用",因为目前您的脚本将整个第6行解析为一个字符串。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-30
      • 1970-01-01
      • 2016-01-18
      • 2019-05-25
      相关资源
      最近更新 更多