将%*从批处理脚本作为$ args传递给powershell脚本时转义参数

时间:2012-09-01 00:00:39

标签: powershell batch-file escaping cmd

我有一个批处理脚本,它接受任意数量的参数(文件列表)并使用以下命令结构执行powershell脚本:

"%POWERSHELL%" -Command "%SCRIPT%" %*

%POWERSHELL%PowerShell.exe的路径,而%SCRIPT%是我的powershell脚本,用于解释接收%* $args的{​​{1}}。问题是,如果我传入文件名test$file.name之类的内容,PowerShell会收到test.name,大概是因为$file被解释为空变量。

是否有一种很好的方法可以使用批处理脚本中的单引号或反引号来转义每个参数,或以其他方式处理此问题?

1 个答案:

答案 0 :(得分:5)

在将%*传递给PowerShell脚本之前转义$字符。

set ARGS=%*
set ARGS=%ARGS:$=`$%
"%POWERSHELL%" -Command "%SCRIPT%" %ARGS%