説明
- PowerShellでファイル文字長制限(PathToLongException、指定されたパス、ファイル名、またはその両方が長すぎます。)が発生する場合の対策
- サードパーティーのDLL(http://alphafs.alphaleonis.com/)を利用します。
- スクリプトと同じフォルダに配置します。
- 隠し属性のファイルは除いています。
- サイズによる制限も実行部には記載しています。
コード
関数
function GetRecurseFiles($mypath) {
<#
.DESCRIPTION
255文字制限対策(サードパーティーの情報を使用する)
#>
Import-Module .\AlphaFS.dll
$fso = New-Object -ComObject Scripting.FileSystemObject
$myfi = @()
[Alphaleonis.Win32.Filesystem.Directory]::GetFiles($mypath, "*", [System.IO.SearchOption]::AllDirectories) | ForEach-Object {
$longFullName = $_
$f = $fso.GetFile($longFullName)
$shortName = $f.ShortPath
$onefile = Get-Item -Force -LiteralPath $shortName
if ($onefile.Attributes -band [System.IO.FileAttributes]::Hidden) {
}else{
$myfi += $onefile
}
}
return $myfi
}
実行部
# フォルダパス
$filepath = "C:\Temp\"
# 50MB以上制限
$maxsize = 1024*50000
# 取得
$fi = GetRecurseFiles($filepath) | Where-Object {$_.Length -ge ($maxsize)}
# 確認
Write-Host $fi.Count
$fi | ForEach-Object {
Write-Host $_.Name
Write-Host $_.FullName
Write-Host $_.Length
}