如何在 PowerShell 中的一行上运行多个命令?

如何在 PowerShell 中的一行上运行多个命令?

在 cmd 提示符中,您可以在一行上运行两个命令,如下所示:

ipconfig /release & ipconfig /renew

当我在 PowerShell 中运行此命令时,我得到:

Ampersand not allowed. The `&` operator is reserved for future use

&PowerShell 是否有一个运算符可以让我在 cmd 提示符中快速生成等效项?

任何在一行中运行两个命令的方法都可以。我知道我可以编写一个脚本,但我正在寻找一些更即兴的方法。

答案1

在 PowerShell 中使用分号链接命令:

ipconfig /release; ipconfig /renew

答案2

在 PowerShell 7 中,我们Pipeline chain operators允许你向连续的单行命令中添加一些条件元素

运算符包括:

  • &&仅当第一个命令成功时才会运行第二个命令。
  • ||仅当第一个命令失败时才会运行第二个命令。

例子:

C:\> Write-Host "This will succeed" && Write-Host "So this will run too"
This will succeed
So this will run too

C:\> Write-Error "This is an error" && Write-Host "So this shouldn't run"
Write-Error "This is an error" && Write-Host "So this shouldn't run": This is an error

C:\> Write-Host "This will succeed" || Write-Host "This won't run"
This will succeed

C:\> Write-Error "This is an error" || Write-Host "That's why this runs"
Write-Error "This is an error" || Write-Host "That's why this runs" 
This is an error
That's why this runs

当然,你可以将它们更多地链接在一起,等等x && y || z

这也适用于旧的类似 cmd 的命令,例如ipconfig

> ipconfig && Write-Error "abc" || ipconfig


Windows-IP-Konfiguration


Ethernet-Adapter Ethernet:

   Verbindungsspezifisches DNS-Suffix: xxx
   Verbindungslokale IPv6-Adresse  . : xxx
   IPv4-Adresse  . . . . . . . . . . : xxx
   Subnetzmaske  . . . . . . . . . . : 255.255.255.0
   Standardgateway . . . . . . . . . : xxx
ipconfig && Write-Error "abc" || ipconfig: abc

Windows-IP-Konfiguration


Ethernet-Adapter Ethernet:

   Verbindungsspezifisches DNS-Suffix: xxx
   Verbindungslokale IPv6-Adresse  . : xxx
   IPv4-Adresse  . . . . . . . . . . : xxx
   Subnetzmaske  . . . . . . . . . . : 255.255.255.0
   Standardgateway . . . . . . . . . : xxx

这些运算符使用 $? 和 $LASTEXITCODE 变量来确定管道是否失败。这样,您就可以将它们与本机命令一起使用,而不仅仅是与 cmdlet 或函数一起使用。

来源:https://docs.microsoft.com/en-us/powershell/scripting/whats-new/what-s-new-in-powershell-70?view=powershell-7

答案3

分号将连接命令正如前面的答案所述&,尽管与 MS-DOS 样式命令解释器中的操作员的行为存在关键区别。

在命令解释器中,变量替换发生在读取行时。这允许一些巧妙的可能性,例如无需中间步骤即可交换变量:

set a=1
set b=2
set a=%b% & set b=%a%
echo %a%
echo %b%

会导致:

2
1

据我所知,在 PowerShell 中没有办法复制此行为。有些人可能会认为这是一件好事。

事实上,在 PowerShell 中有一种方法可以做到这一点:

$b, $a = $a, $b

它将导致单行变量值的交换。

答案4

"C:\\msys64\\mingw64\\bin\\g++.exe -g3 -Wall \"${file}\" -o \"${fileDirname}\\${fileBasenameNoExtension}.exe\" ; &\"${fileDirname}\\${fileBasenameNoExtension}.exe\""

在 powershell 中

相关内容