# ファイル名およびフォルダ名の長さをチェックする
# 長さが255バイト以上だとアウト
# Get-ChildItem -Recurse だとフォルダが巨大な場合に長時間 無応答となるため
# あえてループ処理とする
Write-Host `nEnterキーを押してください。処理を開始します。`n -ForegroundColor Yellow
Read-Host
Write-Host -NoNewline 配下の全フォルダを検索しています
$global:オブジェクト総数 = 0
$global:違反ファイル数 = 0
$global:結果記録 = ""
function ファイルフォルダカウント( $対象フォルダ )
{
$配下オブジェクト = Get-ChildItem( $対象フォルダ ) -Force
$global:オブジェクト総数 += ( ( $配下オブジェクト | Measure-Object ).Count )
Write-Host -NoNewline "."
foreach( $要素 in $配下オブジェクト )
{
フォルダファイル名バイト数チェック $要素
if ( $要素.PSIsContainer -eq $true )
{
ファイルフォルダカウント $要素.FullName
}
}
}
function フォルダファイル名バイト数チェック( $対象オブジェクト )
{
$バイト数 = [System.Text.Encoding]::GetEncoding("utf-8").GetByteCount( $対象オブジェクト.Name )
if ( $バイト数 -gt 255 )
{
$global:違反ファイル数 += 1
if ( $対象オブジェクト.PSIsContainer -eq $true )
{
$対象種類 = "フォルダ"
$対象場所 = $対象オブジェクト.Parent.FullName
$対象名前 = $対象オブジェクト.Name
}
else
{
$対象種類 = "ファイル"
$対象場所 = $対象オブジェクト.Directory.FullName
$対象名前 = $対象オブジェクト.Name
}
$global:結果記録 += "■■■ 名前が長すぎる $対象種類 を発見 ■■■`n"
$global:結果記録 += "■場所:`n $対象場所 `n"
$global:結果記録 += "■${対象種類}名:`n $対象名前 `n"
$global:結果記録 += "■${対象種類}名のバイト数: $バイト数 `n`n`n"
}
}
ファイルフォルダカウント $PSScriptRoot
Write-Host `n処理が完了しました。`n`n
$global:結果記録 += "`n`n全部で $オブジェクト総数 のファイル/フォルダをチェックしました。`n"
# エラーログを確認
if ( $Error.Count -gt 0 )
{
$global:結果記録 += "`n`n★★★ また、下記のようなエラーが出ています。 ★★★`n`n"
$global:結果記録 += "アクセス権の関係でチェックできなかった可能性があります。`n"
$global:結果記録 += "別途、確認してください。`n`n"
foreach( $要素 in $Error )
{
$global:結果記録 += $要素.ToString() + "`n`n"
}
}
Write-Host $global:結果記録
if ( $global:違反ファイル数 -eq 0 )
{
Write-Host 名前が長すぎるファイル/フォルダはありませんでした。`n`n -ForegroundColor Green
}
else
{
$結果出力ファイル名 = Get-Date -Format "yyyyMMddHHmmss"
Write-Output $global:結果記録 | Out-File "ファイル名長さチェック結果_$結果出力ファイル名.txt"
Write-Host `n処理結果を、「 ファイル名長さチェック結果${結果出力ファイル名}.txt 」というファイルとして保存しました。ご確認ください。`n`n -ForegroundColor Red
}
Read-Host 終了してこの画面を閉じます。Enterキーを押してください。