PowerShell v2下筛选含.php文件的唯一域名文件夹的问题求助
解决PowerShell v2中筛选含PHP文件的域名文件夹问题
你的代码问题出在只指定了D:\domains下的第二个域名文件夹(通过[1]索引硬编码选择),所以自然只能输出单个结果。要实现遍历所有域名文件夹并筛选出包含.php文件的唯一域名,我们得调整逻辑,同时适配PowerShell v2的特性——毕竟v2没有-Directory/-File这类便捷参数,得靠PSIsContainer属性来区分文件夹和文件。
完整解决方案代码
# 1. 获取D:\domains下的所有域名文件夹(过滤出子文件夹) # 2. 逐个检查每个域名下是否存在.php文件(递归查找,找到第一个就停止以节省资源) # 3. 收集符合条件的域名名称 $targetDomains = Get-ChildItem -Path D:\domains | Where-Object {$_.PSIsContainer} | ForEach-Object { $hasPhp = Get-ChildItem -Path $_.FullName -Recurse -Filter *.php | Where-Object {!$_.PSIsContainer} | Select-Object -First 1 if ($hasPhp) { $_.Name } } # 去重(确保域名唯一)并以逗号分隔输出 ($targetDomains | Sort-Object -Unique) -join ','
代码细节说明
- 筛选文件夹:用
Where-Object {$_.PSIsContainer}替代v2不支持的-Directory参数,确保只处理D:\domains下的子文件夹(也就是各个域名目录)。 - 高效检查PHP文件:用
Select-Object -First 1,只要找到第一个.php文件就停止遍历,避免不必要的性能消耗。 - 输出格式:通过
-join ','把结果拼接成逗号分隔的字符串,完全符合你给出的示例格式。
如果想直接一行执行,也可以写成:
(Get-ChildItem D:\domains | Where {$_.PSIsContainer} | ForEach {if (Get-ChildItem $_.FullName -Recurse -Filter *.php | Where {!$_.PSIsContainer} | Select -First 1) {$_.Name}}) | Sort -Unique | % {$_} -join ','
内容的提问来源于stack exchange,提问作者Pablo R
相关产品推荐
相关产品推荐

