You need to enable JavaScript to run this app. 如何在PowerShell中调用父目录可执行文件且不改变当前工作目录
优惠活动
大模型
产品
解决方案
定价
更多

如何在PowerShell中调用父目录可执行文件且不改变当前工作目录

问题原因

你遇到的路径找不到报错,核心原因是Start-Process的-FilePath参数解析相对路径时,基准目录不一定和你当前PowerShell会话的工作目录完全同步,当运行上下文的工作目录和预期不符时,相对路径..\Tools\MyTool.exe就会解析失败。

解决方案

你可以提前把相对路径转换为绝对路径再传入,该操作不会修改当前工作目录,符合你的要求,具体实现如下:

场景1:目标可执行文件在「当前运行的脚本文件所在目录的父目录下」

如果这段代码是写在.ps1脚本里的,推荐用PowerShell内置变量$PSScriptRoot(代表当前脚本所在目录的绝对路径)定位,避免脚本在不同工作目录运行时路径解析错误:

# 拼接并解析为绝对路径
$toolFullPath = [System.IO.Path]::GetFullPath((Join-Path $PSScriptRoot "..\Tools\MyTool.exe"))

# 校验文件存在后再启动
if (Test-Path $toolFullPath -PathType Leaf) {
    Start-Process -FilePath $toolFullPath -ArgumentList "MyArgs" -PassThru -NoNewWindow -Wait
} else {
    Write-Error "找不到指定的可执行文件:$toolFullPath"
}

场景2:目标可执行文件在「当前PowerShell会话工作目录的父目录下」

如果是直接在PowerShell终端执行代码,或者确定要以当前会话工作目录为基准,可以直接解析相对路径:

# 直接将相对路径转为绝对路径
$toolFullPath = [System.IO.Path]::GetFullPath("..\Tools\MyTool.exe")

if (Test-Path $toolFullPath -PathType Leaf) {
    Start-Process -FilePath $toolFullPath -ArgumentList "MyArgs" -PassThru -NoNewWindow -Wait
} else {
    Write-Error "找不到指定的可执行文件:$toolFullPath"
}

说明

  • 用.NET方法[System.IO.Path]::GetFullPath解析路径不会对当前PowerShell的工作目录产生任何修改,完全满足你保留当前工作目录的需求。
  • 提前校验文件存在的逻辑可以更精准地定位路径问题,避免模糊的报错信息。

内容的提问来源于stack exchange,提问作者Boris。

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 06:06:00