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


当前回答

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

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

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

其他回答

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

cmd /c "command1 && command2"

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

&&和||在要实现的东西列表上(仍然是),但没有出现在下一个最有用的东西中。原因是我们有-AND和-OR。

如果你认为这很重要,请在Connect上提出建议,我们会考虑V3。

试试这个:

$errorActionPreference='Stop'; csc /t:exe /out:a.exe SomeFile.cs; a.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。

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

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