在cmd提示符下,您可以像这样在一行上运行两个命令:

ipconfig /release & ipconfig /renew


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

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


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

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

评论

有趣的注意:在串行端口和序列化之间,实际上无法搜索此问题。

变得书呆子...搜索它非常容易。要获得相关的热门唱片集非常困难。 :)(+ 1表示很好的问题)

与powershell中的条件执行(&&和||)相似。

#1 楼

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

ipconfig /release; ipconfig /renew


评论


它们将并行运行还是顺序运行?

–塔库斯
2014年7月16日,1:13

这将按顺序运行它们,cmd.exe中的&运算符也是如此。

–紧缩
2014年7月23日下午5:38

虽然有很大的不同-“;”即使第一个命令失败,也会运行第二个命令。

–伊凡
2014年10月8日16:50

如上所述,这也是cmd.exe中&的行为。

–紧缩
2014年10月8日在16:53

@Rafi是,尝试{Command-One -ea Stop}赶上{Command-Tw​​o}

– Dave_J
16年8月5日,11:05

#2 楼

分号将链接命令,如先前的回答所述,尽管与MS-DOS样式命令解释器中的&运算符的行为存在关键差异。

在命令解释器中,变量替换读取行时发生。这提供了一些巧妙的可能性,例如在不使用临时变量的情况下交换变量: >据我所知,无法在PowerShell中复制此行为。有人可能会认为这是一件好事。

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

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


单行交换变量值。

评论


虽然在快捷方式中使用-command选项在“目标”字段中似乎无效

–clearlight
18年4月6日在13:34

#3 楼

在PowerShell 7中,我们具有Pipeline chain operators,它允许您向顺序的单行命令中添加一些条件元素

运算符为:



&&仅在第一个命令成功时才运行第二个命令。

||仅当第一个命令成功时才运行第二个命令。

示例:

PS Z:\Powershell-Scripts> Write-Host "This will succeed" && Write-Host "So this will run too"
This will succeed
So this will run too

PS Z:\Powershell-Scripts> 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

PS Z:\Powershell-Scripts> Write-Host "This will succeed" || Write-Host "This won't run"
This will succeed

PS Z:\Powershell-Scripts> 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

PS Z:\Powershell-Scripts> 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/zh-cn/powershell / scripting / whats-new / what-s-new-in-powershell-70?view = powershell-7

评论


不工作我在powershell中尝试过:无所事事地破坏-f &&无所事事了。不起作用。

–罗勒A
4月9日上午11:05

@BasilA您是否在PowerShell 7最新版本中尝试过此操作?像您这样的非内置命令也可能不起作用。

–SimonS
4月9日下午13:58



@BasilA文档说:“这些运算符使用$?和$ LASTEXITCODE变量来确定管道是否失败。这使您可以将它们与本机命令一起使用,而不仅仅是cmdlet或函数。”因此,您应该检查非本机命令是否正确设置了这些命令

–SimonS
4月9日14:09



好的,请检查一下。谢谢。

–罗勒A
4月9日15:18