2013-02-08 91 views
2

我擁有數千個目錄中的數千個文件。其中一些路徑失控並且比Windows可以處理的時間更長,因此當我嘗試訪問PowerShell中的文件時,出現錯誤。 如何在這些路徑中重命名文件夾,如果它們包含一定長度的字符? (例如,像50+字符一個文件夾)基於長度遞歸地重命名文件夾

編輯:

不,這不是Linux。

錯誤: 這是當我做一個遞歸搜索來查找服務器上的所有文件。

Get-ChildItem : The specified path, file name, or both are too long. The fully qualified file name must be less than 26 0 characters, and the directory name must be less than 248 characters.

+0

這是一個Linux文件服務器嗎?正如你所說,Windows的文件系統不能處理非常長的文件路徑(我認爲最大是259個字符)。如果您嘗試移動,重命名或創建一個達到極限的文件,您將遇到錯誤。 – 2013-02-08 15:03:10

+0

請在處理@ Graimer的問題後發佈您收到的錯誤。 – 2013-02-08 15:06:20

+0

更正:它是Windows文件服務器? SAN?羣集文件系統? :)另外,如果'Get-ChildItem'和Windows在處理文件名時遇到問題,我們應該如何使用powershell重命名它。我建議使用另一個操作系統。也許有人有一個更好的主意。 – 2013-02-08 15:29:05

回答

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+} 
0

使用subst將父文件夾映射到驅動器號並從那裏繼續。