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

时间:2014-03-14 15:25:52

标签: windows batch-file powershell cmd

我编写了一个PowerShell脚本,我希望能够从Windows上的批处理脚本运行。

powershell脚本位于blizzard-main.ps1

CMD脚本如下所示:

@ECHO OFF
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
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,则会执行脚本,但是第一个参数没有以它应该的方式传递。

2 个答案:

答案 0 :(得分: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

(我有一个额外的%。)

答案 1 :(得分:0)

请记住,%~dp0包含一个尾部斜杠,因此您可能不希望在其上添加另一个尾部斜杠。此外,我建议始终在文件的路径上放置双引号,以防路径中有空格。

将命令行更改为:

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