powershell - 在 CMD 批处理文件中使用 FlashWindowEx

标签 powershell batch-file cmd flashwindowex

我有一个 CMD 批处理文件,需要很长时间才能处理,我希望通过闪烁 CMD 窗口来提醒用户需要进行一些输入。

This example works great in powershell但如果我尝试从 CMD 中编译它

powershell -c "Add-Type -TypeDefinition @\";"^
 "using System;"^
..... and so on

它在第一行就失败了。 类似问题讨论here但似乎从未给出解决方案。

那么,有谁知道我如何才能完成这项工作并让我的 CMD 窗口闪烁?

编辑:@mklement0 的回答让我找到了正确的方向。谢谢。

最佳答案

cmd.exe 传递多行 PowerShell 命令是不平凡的,需要大量仔细的转义。

这是一个带有 Add-Type 的最小示例:使用C#代码,它定义了类[Foo]带有静态Bar()方法,然后从 PowerShell 调用它:

powershell -noprofile -c Add-Type -TypeDefinition ' ^
  public class Foo { ^
    public static string Bar() { return \"hi!\"; } ^
  } ^
  '; ^
  [Foo]::Bar()
  • 转义规则的概述位于 this answer ;这里有一些值得注意的事情:

    • Here-strings ( @"<newline>...<newline>"@@'<newline>...<neline>'@ )不能使用,因为它们有严格的空白要求,特别是在开头 @" 后都需要立即换行/@'以及收盘前@"/@' ,而cmd.exe的续行 ^不会导致换行符。因此,您的方法将不起作用(即使删除了开头 ; 后的无关 @")。

    • 使用'...' ( verbatim (single-quoted) strings ),在可能的情况下,简化了转义。
      请注意,PowerShell 的常规字符串文字(不仅仅是此处的字符串)也能够跨越多行,上面的解决方案就利用了这一点。

    • 当您确实需要使用"时,将它们转义为 \" - 如果 " 单独出现或者在给定的内线上有不均匀的数量,将其/最后一个转义为 \^" (原文如此)。

      • 请注意 \"...\" 之外的任何内容被 cmd.exe 视为未引用 ,这样元字符如 &|需要个人^ -逃到那里。
  • 您应该能够将这些规则应用到您的 FlashWindowEx P/Invoke 声明。

关于powershell - 在 CMD 批处理文件中使用 FlashWindowEx,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76384913/

相关文章:

command-line - 如何将多个 visio 文件 (.vsd) 转换为 png

windows - 尝试创建批处理文件以选择要打开的文件

batch-file - "set path"命令阻止 "xcopy"命令工作

sorting - CMD 命令以递归方式列出具有排序顺序的文件夹中的所有文件,而不考虑层次结构中的位置?

c# - system() 到 c# 而不调用 cmd.exe

json - Powershell:json 和 dot 包括值变量访问

.net - 使用System.Net.Dns类指定Nameserver

powershell - 替换文件中的第一行文本

search - Active Directory Powershell - 使用 .csv 用户列表的全林搜索脚本

c# - 在远程服务器上运行脚本文件