2

何千ものディレクトリに何千ものファイルがあります。これらのパスの一部は制御不能であり、Windows が処理できる長さを超えているため、PowerShell 内のファイルにアクセスしようとするとエラーが発生します。特定の長さの文字が含まれている場合、これらのパス内のフォルダーの名前を変更するにはどうすればよいですか? (たとえば、1 つのフォルダーに 50 文字以上)

編集:

いいえ、Linux ではありません。

エラー: これは、サーバー上のすべてのファイルを見つけるために再帰的な検索を行うときです。

Get-ChildItem : 指定されたパス、ファイル名、またはその両方が長すぎます。完全修飾ファイル名は 26 文字未満、ディレクトリ名は 248 文字未満である必要があります。

4

2 に答える 2

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+}
于 2013-02-11T16:53:48.247 に答える
0

subst親フォルダーをドライブ文字にマップし、そこから続行するために使用します。

于 2013-02-10T01:08:01.807 に答える