注意:这个问题最初是在2009年提出的,当时powershell还不支持&&操作符。 2019年,根据Jay的回答,微软在Powershell 7中增加了对&&和||的支持。 https://stackoverflow.com/a/564092/234


最初的问题

&&是出了名的难在谷歌搜索上搜索,但我找到的最好的是这篇文章说要使用-。

不幸的是,它没有提供更多的信息,我不能找到我应该做什么-和(再次,一个出了名的很难搜索的东西)。

我试图使用它的上下文是“执行cmd1,如果成功,执行cmd2”,基本上是这样的:

csc /t:exe /out:a.exe SomeFile.cs && a.exe

如果你只是想在单行上运行多个命令,而不关心第一个命令是否失败,你可以使用;对于我的大多数目的来说,这是可以的。

例如:kill -n myapp;/ myapp.exe。


当前回答

非常老的问题,但对于新手来说:也许这个问题正在寻找的PowerShell版本(类似但不等效)是使用-如下所示:

(build_command) - (run_tests_command)

其他回答

我们可以尝试这个命令,而不是使用&&方法:

try {hostname; if ($lastexitcode -eq 0) {ipconfig /all | findstr /i bios}} catch {echo err} finally {}

我也遇到过同样的问题。原因是我使用的是旧版本的powershell(我已经在使用Windows 11)。在powershell中输入$PSVersionTable检查版本

我发现我实际上使用的是版本5,而最新的版本是7.4。

PSVersion                      5.1.22621.963
PSEdition                      Desktop

安装最新版本后(你可以单独下载或直接去微软商店),并确保你已经成功切换到新版本(你可能需要额外的配置来选择这个版本,因为它安装新版本而不是取代旧版本)

PSVersion                      7.3.2
PSEdition                      Core

我切换到最新版本后,&&可以正常工作。

这取决于上下文,但这里有一个“-”的例子:

get-childitem | where-object { $_.Name.StartsWith("f") -and $_.Length -gt 10kb }

这就是在文件名以“f”开头的目录中获取所有大于10kb的文件。

只需安装PowerShell 7(点击这里,滚动并展开资产部分)。该版本实现了管道链操作符。

一个详细的等效是组合$LASTEXITCODE和-eq 0:

msbuild.exe args; if ($LASTEXITCODE -eq 0) { echo 'it built'; } else { echo 'it failed'; }

我不知道为什么if($?)不适合我,但是这个可以。