注意:这个问题最初是在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。


当前回答

在CMD中,“&&”表示“执行命令1,如果成功,执行命令2”。我用它来做以下事情:

build && run_tests

在PowerShell中,你能做的最接近的事情是:

(build) -and (run_tests)

它具有相同的逻辑,但是命令的输出文本丢失了。也许对你来说已经足够好了。

如果你在脚本中这样做,你可能会更好地分离语句,像这样:

build
if ($?) {
    run_tests
}

2019/11/27: &&操作符现已用于PowerShell 7预览5+:

PS > echo "Hello!" && echo "World!"
Hello!
World!

其他回答

如果你的命令在cmd.exe(类似python ./script.py,但不是PowerShell命令,如ii .exe)中可用。(这意味着通过Windows资源管理器打开当前目录)),您可以在PowerShell中运行cmd.exe。语法是这样的:

cmd /c "command1 && command2"

这里,&&由这个问题中描述的cmd语法提供。

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

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

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

在CMD中,“&&”表示“执行命令1,如果成功,执行命令2”。我用它来做以下事情:

build && run_tests

在PowerShell中,你能做的最接近的事情是:

(build) -and (run_tests)

它具有相同的逻辑,但是命令的输出文本丢失了。也许对你来说已经足够好了。

如果你在脚本中这样做,你可能会更好地分离语句,像这样:

build
if ($?) {
    run_tests
}

2019/11/27: &&操作符现已用于PowerShell 7预览5+:

PS > echo "Hello!" && echo "World!"
Hello!
World!

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

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

Use:

if (start-process filename1.exe) {} else {start-process filename2.exe}

它比“&&”稍微长一点,但它在没有脚本的情况下完成了相同的任务,并且并不太难记住。