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

如何在批处理内嵌的PowerShell脚本中获取批处理文件路径

在嵌入PowerShell的批处理中传递并获取批处理文件路径

核心思路

你当前的批处理是通过Start-Process以管理员身份启动新的PowerShell进程,要传递批处理路径,只需将%~f0(批处理完整路径)作为参数传入新PowerShell进程,再在嵌入的脚本中接收即可。

修改后的完整代码示例

# 2>NUL & @CLS & PUSHD "%~dp0" & powershell -COMMAND "Start-Process powershell -Verb RunAs -ArgumentList '-windowstyle hidden -nol -nop -ep bypass ""& { $batPath = $args[0]; [IO.File]::ReadAllText($batPath) | Select-Object -Skip 1 | iex }""', '%~f0'"
# 这里开始写你的PowerShell脚本,$batPath就是批处理文件的完整路径
Write-Host "批处理文件路径:$batPath"
# 其他PowerShell逻辑...

关键细节解释

  1. 参数传递:在Start-Process的ArgumentList末尾添加'%~f0',将批处理的完整路径作为参数传给新启动的PowerShell进程。
  2. 参数接收与脚本执行:用$args[0]接收传递的路径,再读取批处理文件内容并跳过第一行(启动命令行),最后执行剩余的PowerShell代码。Select-Object -Skip 1是为了避免重复执行批处理的启动逻辑,如果你的批处理启动命令有多行,需调整Skip的数值。
  3. 引号转义:批处理嵌套PowerShell命令时,双引号需要用""转义,确保参数能正确传递。

更清晰的参数定义方式(可选)

如果想让参数更易读,可以用param显式定义参数:

# 2>NUL & @CLS & PUSHD "%~dp0" & powershell -COMMAND "Start-Process powershell -Verb RunAs -ArgumentList '-windowstyle hidden -nol -nop -ep bypass ""& { param($batPath); [IO.File]::ReadAllText($batPath) | Select-Object -Skip 1 | iex }""', '%~f0'"
# PowerShell脚本部分
Write-Host "批处理文件路径:$batPath"
# 其他代码...

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 02:25:12