PowerShell循环中使用Test-Path判断可变路径存在性问题求助
问题原因
你原有代码的核心问题是路径判断逻辑没有和当前遍历到的bat文件绑定,每次判断的是根目录下任意子目录是否存在work_folder,而非当前script.bat所在的父目录是否存在该子文件夹,因此无法实现逐个目录校验的需求。
修正后可运行的示例代码
# 切换到目标根目录 Set-Location -Path "C:\a\test\" # 遍历所有二级子目录下的script.bat文件 Get-ChildItem -Path ".\*\script.bat" -File | ForEach-Object { # 取当前bat文件所在的父目录路径 $currentBatDir = $_.DirectoryName # 拼接当前目录下work_folder的完整路径 $targetWorkDir = Join-Path -Path $currentBatDir -ChildPath "work_folder" if (Test-Path -Path $targetWorkDir -PathType Container) { Write-Host "当前目录 $currentBatDir 存在work_folder,执行对应批处理" # 切换到bat所在目录执行,避免bat内部相对路径报错 Push-Location $currentBatDir & $_.FullName Pop-Location } else { Write-Host "当前目录 $currentBatDir 不存在work_folder,跳过执行" } }
关键修改说明
- 通过
$_.DirectoryName直接获取当前遍历到的script.bat所在的父文件夹路径,不会全局匹配所有子目录 - 使用
Join-Path拼接路径,比手动拼接字符串兼容性更高,避免出现斜杠匹配错误 - 执行bat前切换到bat所在目录,避免bat脚本内部使用相对路径时出现执行异常
内容的提问来源于stack exchange,提问作者qcjuzzqq
相关产品推荐
相关产品推荐

