如何将PowerShell脚本嵌入到与Windows批处理脚本相同的文件中?
我知道在其他情况下这种事情是可能的:
sqlcmd并在文件开头巧妙地安排goto和注释#!/usr/local/bin/python.可能没有办法做到这一点 - 在这种情况下,我将不得不从启动脚本调用单独的PowerShell脚本.
我考虑过的一个可能的解决方案是回显PowerShell脚本,然后运行它.不这样做的一个很好的理由是,尝试这个的部分原因是使用PowerShell环境的优点而没有例如转义字符的痛苦
我有一些不寻常的限制,并希望找到一个优雅的解决方案.我怀疑这个问题可能是各种各样的反应:"你为什么不尝试解决这个不同的问题." 我只想说这些是我的约束,对此感到抱歉.
有任何想法吗?是否有一个巧妙的评论和转义字符的合适组合,这将使我能够实现这一目标?
关于如何实现这一点的一些想法:
^一行中的克拉是一个延续 - 就像Visual Basic中的下划线一样&通常用于将命令echo Hello & echo World结果分成两个回声在不同的行上所以这样的事情(如果我可以使它工作)会很好:
# & call powershell -psconsolefile %0
# & goto :EOF
/* From here on in we're running nice juicy powershell code */
Write-Output "Hello World"
Run Code Online (Sandbox Code Playgroud)
除了...
Windows PowerShell console file "insideout.bat" extension is not psc1. Windows PowerShell console file extension must be …我们有一堆.bat构建脚本,这些脚本由基于 PowerShell 的 GitLab 运行器调用,这些运行器最近重构为:
program args
if !errorlevel! neq 0 exit /b !errorlevel!
Run Code Online (Sandbox Code Playgroud)
更简洁:
program args || exit /b
Run Code Online (Sandbox Code Playgroud)
今天我调查了一个构建作业,如果您查看错误日志,该作业显然失败了,但报告为成功。经过大量实验,我发现这种模式并不总是按预期工作:
program args || exit /b
Run Code Online (Sandbox Code Playgroud)
但是当前者没有时,这似乎确实有效:
program args || exit /b !errorlevel!
Run Code Online (Sandbox Code Playgroud)
我已经阅读了 SO question Windows batch exit option b with or without errorlevel和下面来自https://www.robvanderwoude.com/exit.php的声明,但仍然不能完全解释我正在观察的内容。
DOS 联机帮助 (HELP EXIT) 没有明确说明 /B 参数退出当前脚本实例不一定与退出当前脚本相同。即,如果脚本在 CALLed 代码段中,则 EXIT /B 退出 CALL,而不是脚本。
这是我用来探索这个的最小批处理文件:
@echo off
setlocal EnableDelayedExpansion
cmd /c "exit 99" || exit /b
:: cmd /c …Run Code Online (Sandbox Code Playgroud)