You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 21:27:01