我知道这种事情在其他情况下是可能的:
>使用sqlcmd在批处理脚本中嵌入sql,并在文件开头巧妙安排goto和注释
>在具有程序名称的* nix环境中,您希望在脚本的第一行上运行脚本,注释掉,例如#!/usr/local / bin / python.
可能没有办法这样做 – 在这种情况下,我必须从启动脚本调用单独的PowerShell脚本.
我认为一个可能的解决方案是回显PowerShell脚本,然后运行它.不这样做的一个很好的理由是,尝试这一点的原因之一是利用PowerShell环境的优势,而不会受到诸如escape characters
我有一些不寻常的限制,并希望找到一个优雅的解决方案.我怀疑这个问题可能是诱饵的反应:“为什么不尝试和解决这个不同的问题.只要说这些是我的限制,对此就不好意思.
有任何想法吗?有没有一个巧妙的评论和转义字符的组合,这将使我能实现这一点?
关于如何实现这一点的一些想法:
>一行的结尾处的一个克拉是一个延续 – 就像Visual Basic中的一个下划线
>和号&通常用于分隔命令echo Hello&回声世界在两条回归线上分开
>%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并不完全满足于这种情况 – 尽管它在’#’上绊倒,但它不被识别为内部或外部命令,可操作的程序或批处理文件.
dosps2.cmd:
@findstr/v "^@f.*&" "%~f0"|powershell -&goto:eof Write-Output "Hello World" Write-Output "Hello some@com & again"
regular expression不包括以@f开头的行,包括&并将所有其他内容传递给PowerShell.
C:\tmp>dosps2 Hello World Hello some@com & again