![如何在 PowerShell 中的一行上运行多个命令?](https://linux22.com/image/1368414/%E5%A6%82%E4%BD%95%E5%9C%A8%20PowerShell%20%E4%B8%AD%E7%9A%84%E4%B8%80%E8%A1%8C%E4%B8%8A%E8%BF%90%E8%A1%8C%E5%A4%9A%E4%B8%AA%E5%91%BD%E4%BB%A4%EF%BC%9F.png)
在 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 或函数一起使用。
答案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 中