PowerShell中Test-Path无法识别本地化文件夹名称的求助
让PowerShell识别Windows本地化文件夹名称的方法
问题原因
Windows里像Benutzer这类名称是C:\Users文件夹的本地化显示名称(由系统区域设置控制,信息存储在文件夹的desktop.ini配置文件中),并非文件系统层面的真实路径。PowerShell的Test-Path默认直接校验文件系统的实际路径,因此直接使用显示名称会返回False。
解决方法
1. 使用系统特殊文件夹的环境变量或.NET API
Windows为这类特殊文件夹提供了内置的环境变量和.NET方法,可以直接获取真实路径:
- 获取用户文件夹真实路径:
# 方法1:使用环境变量 $userFolderPath = $env:SystemDrive + "\Users" # 方法2:使用.NET API $userFolderPath = [Environment]::GetFolderPath('UserProfiles') Test-Path $userFolderPath # 返回True - 如果要定位当前用户的个人文件夹,直接调用
$env:USERPROFILE即可。
2. 解析本地化显示名称到真实路径
通过Windows Shell对象,可以将本地化显示名称转换为文件系统真实路径,再进行路径校验:
# 创建Shell对象实例 $shell = New-Object -ComObject Shell.Application # 解析C:\下的"Benutzer"文件夹 $localizedFolder = $shell.Namespace('C:\').ParseName('Benutzer') # 如果解析成功,获取真实路径并校验 if ($localizedFolder) { $realPath = $localizedFolder.Path Test-Path $realPath # 返回True }
3. 自定义函数简化操作
如果需要频繁处理本地化路径,可以封装一个自定义函数:
function Test-LocalizedPath { param( [Parameter(Mandatory=$true)] [string]$LocalizedPath ) $shell = New-Object -ComObject Shell.Application $parentDir = Split-Path $LocalizedPath -Parent $folderName = Split-Path $LocalizedPath -Leaf $targetFolder = $shell.Namespace($parentDir).ParseName($folderName) return $targetFolder ? (Test-Path $targetFolder.Path) : $false } # 调用示例 Test-LocalizedPath 'C:\Benutzer' # 返回True
内容的提问来源于stack exchange,提问作者Mattia72
相关产品推荐
相关产品推荐

