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

hay*_*art 5 powershell cmd escaping batch-file

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

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

%POWERSHELL%是路径PowerShell.exe,%SCRIPT%是我的powershell脚本解释收到%*$args.问题是,如果我传入类似文件名的东西test$file.name,PowerShell会收到test.name,大概是因为它$file被解释为一个空变量.

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

Ans*_*ers 5

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

set ARGS=%*
set ARGS=%ARGS:$=`$%
"%POWERSHELL%" -Command "%SCRIPT%" %ARGS%
Run Code Online (Sandbox Code Playgroud)

  • @ hayk.mart:`%VAR:S1 = S2%`替换变量中的字符串,有关详细信息,请参阅`help set`. (2认同)