从全名获取目录,重命名目录



我想查找全名超过 256 个字符的所有文件。

从这些文件,我想重命名文件夹。

在我此时的

时刻
$maxLength = 260
$newPath = "a_path"
$paths = Get-ChildItem $newPath -force -Recurse | 
Where-Object { ($_.FullName.Length -gt $maxLength) } |
% {
Write-Host $_.FullName
}

但现在我迷路了。

  1. 我不明白为什么命令写主机$paths不再起作用。
  2. 从全名我只需要目录,我试图用它

    选择目录 或 拆分路径

但这也行不通。

  1. 我怎么能说将目录名称"修剪"为 $maxLength = 260

谢谢你的一些提示!

CYA_D0c

  1. 我不明白为什么命令write-host $paths不起作用 了。

Write-Hostcmdlet 替换为Select-Object

$maxLength = 260
$newPath = "a_path"
$paths = Get-ChildItem $newPath -Force -Recurse | Where-Object {$_.FullName.Length -gt $maxLength} | Select-Object -ExpandProperty FullName

然后$paths将是所需完整路径的列表。

  1. 从全名我只需要目录,我试图得到 它与select DirectorySplith-Path. 但这也行不通。

Splith-Path会这样做:

$paths | Split-Path -Parent
  1. 我怎么能说将目录名称"修剪"为 $maxLength = 260

这并不像你想象的那么容易。你想修剪它的名字?如果目录的修剪名称已存在,该怎么办?

当然,您可以随时重命名目录,但是如果要自动将目录名称修剪到一定长度,则需要一定的命名约定。

你最初的问题是什么?您是否仍在使用限制为最大路径长度为 256 的 Windows 7 或旧版 MS Office 产品?

Write-Host仅用于将文本字符发送到您的终端,无论是PowerShell提示符还是其他东西,您都无法像尝试的那样在变量中捕获它。

我们可以将您的代码简化为这样,只获得那些长度超过 260 的路径。

$paths = Get-ChildItem $newPath -force -Recurse | 
Where-Object { ($_.FullName.Length -gt $maxLength) } | Select-Object -Expand Fullname   

这应该只给你一个太长的目录列表,存储在$paths. 您可以将其导出为 csv 文件,如下所示:

$paths | Export-Csv C:PathToMyCooL.csv

正是在这一点上,您应该暂停并决定如何继续。

这种过程经常被尝试,作为一个蜂巢思维,我们已经确定它不是自动化的理想候选者。 相反,一个人应该查看列表,然后明智地做出重命名目录的正确决定。

为什么?例如,如果您的重命名脚本在C:ProgramData中运行 amuk,则很容易破坏某些应用程序。 在查看列表时,您可能会发现包含可视C++可再发行组件或其他重要内容的深度嵌套安装。 您需要就如何重命名它做出正确的决定,以便安全地执行此操作。

最新更新