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

如何强制Invoke-Item调用的Batch文件使用指定工作目录?

问题描述

目录结构

C:
+-- Test
    +-- Batch
        + -- Foo.bat
        + -- Bar.bat
    +-- PS
        +-- Foo.ps1

文件内容

  • Foo.bat内容:
call Bar.bat
  • Foo.ps1当前调用代码:
Set-Location "C:\Test\Batch"
Invoke-Item "Foo.bat"

核心问题

运行Foo.ps1时,Foo.bat实际工作目录仍是C:\Test\PS,导致找不到同目录的Bar.bat。且无法修改Foo.bat,也不能将Foo.ps1移动到Batch目录,需要强制Foo.bat以C:\Test\Batch作为工作目录执行。

解决方案

方法1:用Start-Process指定工作目录

这是最直接的方式,Start-Process可直接为被调用的批处理指定工作目录:

Start-Process -FilePath "C:\Test\Batch\Foo.bat" -WorkingDirectory "C:\Test\Batch" -NoNewWindow -Wait
  • -NoNewWindow:在当前控制台窗口执行,不会弹出新窗口
  • -Wait:等待批处理执行完成后,再继续运行PowerShell脚本

方法2:直接调用cmd.exe并切换目录

通过cmd执行批处理,先切换到目标目录再运行:

cmd.exe /c "cd /d C:\Test\Batch && Foo.bat"

/d参数确保cmd能切换到不同驱动器的目录,&&保证只有切换目录成功后才执行批处理。

方法3:用Invoke-Expression整合目录切换

如果不想用Start-Process,可以把切换目录和执行批处理放在同一个子进程中执行:

Invoke-Expression "cd C:\Test\Batch; .\Foo.bat"

内容的提问来源于stack exchange,提问作者Bill Tür stands with Ukraine

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 10:03:20