Windows CMD(BAT)文件中奇怪的参数替换

Windows CMD(BAT)文件中奇怪的参数替换,windows,batch-file,powershell,cmd,Windows,Batch File,Powershell,Cmd,我已经编写了一个powershell脚本,希望能够从Windows上的批处理脚本运行该脚本 powershell脚本位于暴雪main.ps1中 CMD脚本如下所示: @ECHO OFF powershell -command "& { . %~dp0%\blizzard-main.ps1; Blizzard-Main %1}" :EOF @ECHO OFF ECHO powershell -command "& { . %~dp0%\blizzard-main.ps1; Bli

我已经编写了一个powershell脚本,希望能够从Windows上的批处理脚本运行该脚本

powershell脚本位于暴雪main.ps1中

CMD脚本如下所示:

@ECHO OFF
powershell -command "& { . %~dp0%\blizzard-main.ps1; Blizzard-Main %1}"
:EOF
@ECHO OFF
ECHO powershell -command "& { . %~dp0%\blizzard-main.ps1; Blizzard-Main %1}"
:EOF
运行此命令时出现的奇怪错误是:

. : The term 'C:\Users\mzr\Documents\GitHub\ProductionTools\Blizzard\Dist\Blizzard\bin\1'
is not recognized as the name of a cmdlet, function, script file, or operable program.
Check the spelling of the name, or if a path was included, verify that the path is
correct and try again.

At line:1 char:7

+ & { . C:\Users\mzr\Documents\GitHub\ProductionTools\Blizzard\Dist\Blizzard\bin\1 ...
[SNIP]
如果我使用echo调试脚本,如下所示:

@ECHO OFF
powershell -command "& { . %~dp0%\blizzard-main.ps1; Blizzard-Main %1}"
:EOF
@ECHO OFF
ECHO powershell -command "& { . %~dp0%\blizzard-main.ps1; Blizzard-Main %1}"
:EOF
我得到了这个有趣的输出:

powershell -command "& { . C:\Users\mzr\Documents\GitHub\ProductionTools\Blizzard\Dist\Blizzard\bin\1}"

很明显,有些事情搞砸了。如果我删除
%1
,脚本将被执行,但第一个参数的传递方式并不正确。

请记住,
%~dp0
包含一个尾随斜杠,因此您可能不想在其上再添加一个尾随斜杠。另外,我建议总是在文件路径周围加上双引号,以防路径中有空格

将命令行更改为:

powershell -command "& { . \"%~dp0%blizzard-main.ps1\"; Blizzard-Main %1}"

我自己发现了错误:

@ECHO OFF
ECHO powershell -command "& { . %~dp0%\blizzard-main.ps1; Blizzard-Main %1}"
:EOF
应改为

@ECHO OFF
ECHO powershell -command "& { . %~dp0\blizzard-main.ps1; Blizzard-Main %1}"
:EOF
(我有一个额外的
%