如何使($ Line_1`n $ Line_2)在CMD脚本中工作?

马修·韦

我在CMD脚本文件中使用以下代码

PowerShell Add-Type -AssemblyName System.Windows.Forms;^
$Line_1 = 'Hello!';^
$Line_2 = 'How are you?';^
[System.Windows.Forms.MessageBox]::Show($Line_1)

上面将仅显示如果使用,将不显示任何内容。($Line_1)
($Line_1`n$Line_2)

如何使其同时显示$Line_1$Line_2

phuclv

显然$Line_1 + "`n" + $Line_2"$Line_1`n$Line_2"正常工作。通过旧的怪癖从cmd向PowerShell发送命令字符串是很棘手的,因为:

PowerShell将命令放在最后一个参数单个字符串中,因此您需要引用整个内容或转义所有定界符。最简单的解决方案是使用单行并"`n"像这样转义引号

PowerShell "Add-Type -AssemblyName System.Windows.Forms; $Line_1 = 'Hello!'; $Line_2 = 'How are you?'; [System.Windows.Forms.MessageBox]::Show($Line_1 + \"`n\" + $Line_2)"

如果要将命令放在多行中,则不能用引号引起来。现在要将整个内容作为单个参数,您需要转义所有空格(;在这种情况下,您无需转义,这可能是因为在将命令行传递给PowerShell之后,它会GetCommandLineW再次调用并解析整个事物本身)

PowerShell Add-Type^ -AssemblyName^ System.Windows.Forms;^
$Line_1^ =^ 'Hello!';^
$Line_2^ =^ 'How^ are^ you?';^
[Windows.Forms.MessageBox]::Show($Line_1^ +^ \"`n\"^ +^ $Line_2)"

另外,您可以"`n"通过直接获取新行来避免该字符串[char]10

PowerShell -Command Add-Type -AssemblyName System.Windows.Forms;^
$Line_1 = 'Hello!';^
$Line_2 = 'How are you?';^
[System.Windows.Forms.MessageBox]::Show($Line_1 + [char]10 + $Line_2)

最终,一种无需任何转义即可工作的解决方案,它利用EncodedCommandPowerShell选项来接收UTF-16命令字符串的base64编码的字符串。您可以通过在PowerShell中运行此代码来获取编码版本

$str = @'
>> Add-Type -AssemblyName System.Windows.Forms;
>> $Line_1 = 'Hello!';
>> $Line_2 = 'How are you?';
>> [System.Windows.Forms.MessageBox]::Show($Line_1 + "`n" + $Line_2)
>> '@
PS C:\Users\phucl> [Convert]::ToBase64String([Text.Encoding]::Unicode.GetBytes($str))
QQBkAGQALQBUAHkAcABlACAALQBBAHMAcwBlAG0AYgBsAHkATgBhAG0AZQAgAFMAeQBzAHQAZQBtAC4AVwBpAG4AZABvAHcAcwAuAEYAbwByAG0AcwA7AAoAIAA9ACAAJwBIAGUAbABsAG8AIQAnADsACgAgAD0AIAAnAEgAbwB3ACAAYQByAGUAIAB5AG8AdQA/ACcAOwAKAFsAUwB5AHMAdABlAG0ALgBXAGkAbgBkAG8AdwBzAC4ARgBvAHIAbQBzAC4ATQBlAHMAcwBhAGcAZQBCAG8AeABdADoAOgBTAGgAbwB3ACgAIAArACAAIgAKACIAIAArACAAKQA=

拥有编码版本后,您可以从cmd调用它

PowerShell -EncodedCommand QQBkAGQALQBUAHkAcABlACAALQBBAHMAcwBlAG0AYgBsAHkATgBhAG0AZQAgAFMAeQBzAHQAZQBtAC4AVwBpAG4AZABvAHcAcwAuAEYAbwByAG0AcwA7AAoAJABMAGkAbgBlAF8AMQAgAD0AIAAnAEgAZQBsAGwAbwAhACcAOwAKACQATABpAG4AZQBfADIAIAA9ACAAJwBIAG8AdwAgAGEAcgBlACAAeQBvAHUAPwAnADsACgBbAFMAeQBzAHQAZQBtAC4AVwBpAG4AZABvAHcAcwAuAEYAbwByAG0AcwAuAE0AZQBzAHMAYQBnAGUAQgBvAHgAXQA6ADoAUwBoAG8AdwAoACQATABpAG4AZQBfADEAIAArACAAIgBgAG4AIgAgACsAIAAkAEwAaQBuAGUAXwAyACkA

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

cmd> / dev / null 2>&1如何工作?

Circle_2 和 Line_2 与 CGAL 的交点

* line = input()。split()在python 3中如何工作?

如何从与脚本2 3等共享的脚本1中获取整数

如何从节点文件创建cmd line应用

在bash中,cmd1如何?当cmd1失败时,cmd2返回cmd1的状态代码?

如何删除datagrid中的Line?

take 2 $ [1..] 在haskell 中如何工作?

如何从 NSIS 脚本更改 cmd 中的目录?

N <-> 1线程模型如何工作?

bash中的“ <(cmd)”模式如何工作?

如何让 cmd-line 连续打印日志信息?

如何从JSON导入的数据将工作表1附加到Google表格的工作表2中

如何在shell脚本中使用oracle $$ PLSQL_LINE?

Bash脚本中的for循环如何工作?

如何让 -Depth 开关在脚本中工作?

在bash脚本中“ until $ @”到底如何工作?

想要从php中的line(1)到line(n)读取文件

如何从 DataFrame 中删除 '\n + 1'?

如何将3个文本文件合并为一个(文本1的Line1 +文本2的Line1 +文本3的Line1)

如果1 = 2 = 3那么(...)如何工作

sort -k 1,2如何工作?

ax = a = {n:b}在JavaScript中如何工作?

delete_at(n)在Ruby中如何工作?

如何解决“JSONDecodeError: Expecting value: line 1 column 1 (char 0)”

如果我知道1 + 2 + 3 + .. + n = n *(n + 1)/ 2的结果,如何得到n?

如何在R脚本中从数据集1创建子集(数据集2)

如何在$ 1和$ 2的bash脚本中包含自定义命令选项?

如何从Server1执行Powershell脚本以在Server2中部署WSP