我想查找全名超过 256 个字符的所有文件。
从这些文件,我想重命名文件夹。
在我此时的
时刻$maxLength = 260
$newPath = "a_path"
$paths = Get-ChildItem $newPath -force -Recurse |
Where-Object { ($_.FullName.Length -gt $maxLength) } |
% {
Write-Host $_.FullName
}
但现在我迷路了。
- 我不明白为什么命令写主机$paths不再起作用。
从全名我只需要目录,我试图用它
选择目录 或 拆分路径
但这也行不通。
- 我怎么能说将目录名称"修剪"为 $maxLength = 260
谢谢你的一些提示!
CYA_D0c
- 我不明白为什么命令
write-host $paths
不起作用 了。
将Write-Host
cmdlet 替换为Select-Object
:
$maxLength = 260
$newPath = "a_path"
$paths = Get-ChildItem $newPath -Force -Recurse | Where-Object {$_.FullName.Length -gt $maxLength} | Select-Object -ExpandProperty FullName
然后$paths
将是所需完整路径的列表。
- 从全名我只需要目录,我试图得到 它与
select Directory
或Splith-Path
. 但这也行不通。
Splith-Path
会这样做:
$paths | Split-Path -Parent
- 我怎么能说将目录名称"修剪"为 $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++可再发行组件或其他重要内容的深度嵌套安装。 您需要就如何重命名它做出正确的决定,以便安全地执行此操作。