根据长度递归重命名文件夹

时间:2013-02-08 14:41:38

标签: powershell

我在成千上万的目录中有数千个文件。其中一些路径失控并且比Windows可以处理的时间更长,因此当我尝试访问PowerShell中的文件时,出现错误。 如果文件夹包含一定长度的字符,如何在这些路径中重命名文件夹? (例如,一个文件夹的50多个字符)

修改

不,它不是Linux。

错误: 这是当我做一个递归的searce来查找服务器上的所有文件。

  

Get-ChildItem:指定的路径,文件名或两者都太长。   完全限定的文件名必须少于26 0个字符,并且   目录名称必须少于248个字符。

2 个答案:

答案 0 :(得分:0)

使用subst将父文件夹映射到驱动器号并从那里继续。

答案 1 :(得分:0)

在与代码上的另一个人合作之后,我们能够提出一些有效的方法。我实际上不得不缩小搜索长度,因为其中一些路径实际上是失控的。

takeown /f \\server\share\foo /r /d Y /a >c:\takeown.log

$folders= Get-ChildItem -Path "\\server\share\foo" -recurse | where {$_.PsIsContainer}
$sortedfolders = $folders | sort-object -descending -property fullname
foreach ($f in $folders) {
if ($f.name.length -gt 10) { 

   rename-item $f.fullname (get-random).tostring()
   } 
}


$aolesfolders | gm

$sorted | ft fullname
$aolesfolders | select-object name, root, fullname, parent | export-csv     c:\testrename.txt
get-random | gm
(get-random).ToString().gettype()

foreach ($f in $folders) {
if ($f.name.length -gt 10) { 

   rename-item $f.fullname (get-random).tostring()
   } 
} 

{rename-item $f.name $f.parent+}