注意:这个问题最初是在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中尝试了以下命令序列:
第一个测试
PS C:\> $MyVar = "C:\MyTxt.txt"
PS C:\> ($MyVar -ne $null) -and (Get-Content $MyVar)
True
($MyVar -ne $null)返回true, (Get-Content $MyVar)也返回true。
第二次测试
PS C:\> $MyVar = $null
PS C:\> ($MyVar -ne $null) -and (Get-Content $MyVar)
False
($MyVar -ne $null)返回false,到目前为止,我必须假设(Get-Content $MyVar)也返回false。
第三个测试证明第二个条件甚至没有被分析。
PS C:\> ($MyVar -ne $null) -and (Get-Content "C:\MyTxt.txt")
False
($MyVar -ne $null)返回false并证明第二个条件(Get-Content "C:\MyTxt.txt")从未运行,通过在整个命令上返回false。
我在PowerShell中尝试了以下命令序列:
第一个测试
PS C:\> $MyVar = "C:\MyTxt.txt"
PS C:\> ($MyVar -ne $null) -and (Get-Content $MyVar)
True
($MyVar -ne $null)返回true, (Get-Content $MyVar)也返回true。
第二次测试
PS C:\> $MyVar = $null
PS C:\> ($MyVar -ne $null) -and (Get-Content $MyVar)
False
($MyVar -ne $null)返回false,到目前为止,我必须假设(Get-Content $MyVar)也返回false。
第三个测试证明第二个条件甚至没有被分析。
PS C:\> ($MyVar -ne $null) -and (Get-Content "C:\MyTxt.txt")
False
($MyVar -ne $null)返回false并证明第二个条件(Get-Content "C:\MyTxt.txt")从未运行,通过在整个命令上返回false。
在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!