PowerShell搜索文件脚本可查到文件却提示不存在的问题解答
脚本存在的核心编写错误
- 前后逻辑完全割裂:前面执行
Get-ChildItem遍历C、E盘搜索到文件后,只是把路径打印到控制台就丢弃了结果,完全没有把搜索结果传递给后续的判断逻辑,相当于前面的搜索操作和后面的存在性判断没有任何关联。 Test-Path参数使用错误:你给Test-Path传入的路径只有裸文件名Myfile.exe,这种写法下Test-Path只会在当前PowerShell会话的工作目录下查找同名文件,根本不会遍历C、E盘的所有子目录,哪怕其他路径下确实存在目标文件,只要当前工作目录里没有,就会返回不存在的结果。- 存在冗余代码:脚本中两次重复给
$filename赋值相同的内容,属于无意义的冗余写法。
修正后的可运行代码
$filename = 'Myfile.exe' # 遍历C、E盘搜索目标文件,跳过无权限访问的系统目录报错,仅匹配文件不匹配同名文件夹 $searchResult = Get-ChildItem -Path C:\, E:\ -Filter $filename -Recurse -File -ErrorAction SilentlyContinue "Test to see if file $filename exists" if ($searchResult) { "File exists" # 如需查看找到的文件完整路径,放开下一行注释即可 # $searchResult | ForEach-Object { $_.FullName } } else { "File does not exist" }
修正说明
- 把
Get-ChildItem的搜索结果存入变量$searchResult,直接通过判断变量是否为空确认文件是否存在,不需要额外调用Test-Path做重复的磁盘检索,效率更高。 - 新增
-File参数,避免搜索结果中出现同名文件夹导致误判。 - 新增
-ErrorAction SilentlyContinue参数,屏蔽访问系统受保护目录、无权限目录时抛出的冗余报错信息。 - 单文件名匹配场景下用
-Filter替代-Include,检索速度更快。
内容的提问来源于stack exchange,提问作者Anson
相关产品推荐
相关产品推荐

