相关疑难解决方法(0)

如何在Windows批处理文件中运行PowerShell脚本

如何将PowerShell脚本嵌入到与Windows批处理脚本相同的文件中?

我知道在其他情况下这种事情是可能的:

  • 在批处理脚本中嵌入SQL,sqlcmd并在文件开头巧妙地安排goto和注释
  • 在具有程序名称的*nix环境中,您希望在脚本的第一行运行脚本,例如,#!/usr/local/bin/python.

可能没有办法做到这一点 - 在这种情况下,我将不得不从启动脚本调用单独的PowerShell脚本.

我考虑过的一个可能的解决方案是回显PowerShell脚本,然后运行它.这样做的一个很好的理由是,尝试这个的部分原因是使用PowerShell环境的优点而没有例如转义字符的痛苦

我有一些不寻常的限制,并希望找到一个优雅的解决方案.我怀疑这个问题可能是各种各样的反应:"你为什么不尝试解决这个不同的问题." 我只想说这些是我的约束,对此感到抱歉.

有任何想法吗?是否有一个巧妙的评论和转义字符的合适组合,这将使我能够实现这一目标?

关于如何实现这一点的一些想法:

  • ^一行中的克拉是一个延续 - 就像Visual Basic中的下划线一样
  • &符号&通常用于将命令echo Hello & echo World结果分成两个回声在不同的行上
  • %0将为您提供当前正在运行的脚本

所以这样的事情(如果我可以使它工作)会很好:

# & 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)

除了...

  • 它不起作用......因为
  • 文件的扩展名不符合PowerShell的喜好: Windows PowerShell console file "insideout.bat" extension is not psc1. Windows PowerShell console file extension must be …

windows powershell scripting cmd batch-file

19
推荐指数
6
解决办法
2万
查看次数

"|| exit /b" 和 "|| exit /b !errorlevel!" 之间的区别

我们有一堆.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)

powershell cmd batch-file

12
推荐指数
3
解决办法
426
查看次数

标签 统计

batch-file ×2

cmd ×2

powershell ×2

scripting ×1

windows ×1