PowerShell中如何检查文件是否为可读的常规文件?
PowerShell实现文件可读性与常规文件检查
嘿,作为PowerShell新手,我完全懂你想找到对应Unix Shell那种简洁写法的需求!咱们直接来对应Unix里-f(常规文件)和-r(可读)的PowerShell实现,还有类似的函数写法。
首先,先明确两个检查点的对应关系:
- Unix的
-f:检查路径是否存在且是常规文件(非目录、设备、符号链接等),对应PowerShell里的Test-Path -PathType Leaf,或者通过文件对象的PSIsContainer属性判断(-not $file.PSIsContainer)。 - Unix的
-r:检查当前用户是否有读取该文件的权限,对应PowerShell里的Test-Path -Readable(PowerShell 5.1及以上版本支持)。
完整的PowerShell函数实现
下面是和你提到的Shell函数功能完全对应的PowerShell版本,它接收文件名作为参数,完成两项检查:
function Test-RegularReadableFile { param( # 强制要求传入文件路径参数 [Parameter(Mandatory=$true)] [string]$FilePath ) # 检查是否为常规文件(对应Unix的-f) $isRegular = Test-Path -Path $FilePath -PathType Leaf # 检查文件是否可读(对应Unix的-r) $isReadable = Test-Path -Path $FilePath -Readable if ($isRegular -and $isReadable) { Write-Host "文件 '$FilePath' 是常规可读文件。" return $true } else { Write-Host "文件 '$FilePath' 不是常规可读文件。" return $false } }
函数用法示例
你可以这样调用这个函数来测试文件:
# 测试存在且可读的文件 Test-RegularReadableFile -FilePath "C:\Users\YourName\Documents\test.txt" # 测试不存在的文件 Test-RegularReadableFile -FilePath "C:\non_existent_file.txt"
补充细节
- 如果文件不存在,
Test-Path会直接返回false,所以两个检查条件都会失败,和Unix的行为一致。 Test-Path -Readable检查的是当前用户的权限,而不是文件的「只读」属性(文件系统里的只读标记),这和Unix的-r逻辑完全匹配——即使文件标记为只读,只要用户有权限读取,就会返回true。
内容的提问来源于stack exchange,提问作者Mayank
相关产品推荐
相关产品推荐

