我编写了一个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
,则会执行脚本,但是第一个参数没有以它应该的方式传递。
答案 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}"