我有一个 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/