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

批处理脚本中%*参数带引号传递给PowerShell脚本的问题

解决批处理脚本转发带空格参数到PowerShell的问题

你的问题核心是批处理中直接使用%*传递参数到PowerShell的-Command参数时,带空格的参数会被拆分,导致PowerShell只能接收到部分内容。最简洁可靠的解决方法是改用PowerShell的-File参数来执行脚本,它会自动正确处理带空格的参数传递。

修改后的Example.bat代码如下:

@echo off
set "cwd=%~dp0"
powershell -NoProfile -ExecutionPolicy Bypass -File "%cwd%Example.ps1" %*

为什么这个方法有效

-File是PowerShell专门用于执行脚本文件的参数,它会将后续的参数原样传递给目标脚本,和直接在PowerShell环境中运行.ps1脚本的参数处理逻辑完全一致,不需要额外的转义操作。

测试验证

  • 执行 ./Example.bat Oh,正常输出 Oh
  • 执行 ./Example.bat "Oh no",正确输出 Oh no
  • 不需要额外给参数加嵌套引号,使用方式统一,避免了耦合问题

如果因为某些原因必须使用-Command参数,可以通过循环处理每个参数并添加引号的方式解决(需要启用延迟变量扩展),但这种方式复杂度更高,不推荐:

@echo off
setlocal enabledelayedexpansion
set "cwd=%~dp0"
set "args="
for %%a in (%*) do set "args=!args! "%%~a""
powershell -NoProfile -ExecutionPolicy Bypass -Command "& '%cwd%Example.ps1' %args%"
endlocal

内容的提问来源于stack exchange,提问作者Maarten ten Velden

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 09:06:00