gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 12:18:14 26 4
gpt4 key购买 nike

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

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

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

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

我考虑过的一种可能的解决方案是回显 PowerShell 脚本,然后运行它。 这样做的一个很好的理由是,尝试这样做的部分原因是为了利用 PowerShell 环境的优势,而不会有痛苦,例如,escape characters

我有一些不寻常的约束,想找到一个优雅的解决方案。我怀疑这个问题可能会引来各种各样的回答:“你为什么不尝试解决这个不同的问题呢。”我只想说这些是我的限制,对此感到抱歉。

有什么想法吗?是否有巧妙的注释和转义字符的合适组合可以让我实现这一目标?

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

  • 一行末尾的 ^ 是一个延续 - 就像 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 对这种情况也不太满意 - 尽管它确实遇到了 “#”,但它未被识别为内部或外部命令、可运行程序或批处理文件。<

最佳答案

这只将正确的行传递给 PowerShell:

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

关于windows - 如何在 Windows 批处理文件中运行 PowerShell 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2609985/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com