如何将PowerShell脚本嵌入到与Windows批处理脚本相同的文件中?
我知道在其他情况下这种事情是可能的:
- 使用`sqlcmd`和文件开头的精心安排的goto和注释将SQL嵌入批处理脚本中 - 在*nix环境中,将希望运行脚本的程序名称作为脚本第一行的注释,例如`#!/usr/local/bin/python`。
也许没有办法做到这一点 - 如果是这样,我将不得不从启动脚本中调用单独的PowerShell脚本。
我考虑过的一个可能的解决方案是回显PowerShell脚本,然后运行它。不这样做的一个很好的理由是,尝试这样做的部分原因是使用PowerShell环境的优势,而不需要例如转义字符的麻烦。
我有一些不寻常的限制,并希望找到一个优雅的解决方案。我怀疑这个问题可能会引起各种回应:“为什么你不尝试解决不同的问题。”可以说这些是我的限制,对此感到抱歉。
有什么想法吗?是否有适当的巧妙注释和转义字符组合,可以使我实现这一点?
关于如何实现这一点的一些想法:
我知道在其他情况下这种事情是可能的:
- 使用`sqlcmd`和文件开头的精心安排的goto和注释将SQL嵌入批处理脚本中 - 在*nix环境中,将希望运行脚本的程序名称作为脚本第一行的注释,例如`#!/usr/local/bin/python`。
也许没有办法做到这一点 - 如果是这样,我将不得不从启动脚本中调用单独的PowerShell脚本。
我考虑过的一个可能的解决方案是回显PowerShell脚本,然后运行它。不这样做的一个很好的理由是,尝试这样做的部分原因是使用PowerShell环境的优势,而不需要例如转义字符的麻烦。
我有一些不寻常的限制,并希望找到一个优雅的解决方案。我怀疑这个问题可能会引起各种回应:“为什么你不尝试解决不同的问题。”可以说这些是我的限制,对此感到抱歉。
有什么想法吗?是否有适当的巧妙注释和转义字符组合,可以使我实现这一点?
关于如何实现这一点的一些想法:
- 行末的克拉符号
^
表示续行,类似于Visual Basic中的下划线 - 和号
&
通常用于分隔命令,echo Hello & echo World
会在两行上分别输出两个echo - %0将给出当前运行的脚本
所以如果我能让它正常工作,就像这样:
# & call powershell -psconsolefile %0
# & goto :EOF
/* From here on in we're running nice juicy powershell code */
Write-Output "Hello World"
除非...
- 它不起作用...因为
- 文件的扩展名不符合PowerShell的喜好:
Windows PowerShell控制台文件"insideout.bat"的扩展名不是psc1。Windows PowerShell控制台文件扩展名必须是psc1。
- CMD对此情况也不太满意 - 尽管它会在
'#'上绊倒,但它不被识别为内部或外部命令、可操作程序或批处理文件。