&&
很难在谷歌上搜索,但我发现的最好的是this article,它说要使用-and
。
不幸的是,它没有提供任何更多的信息,我无法找到我应该用-and
做什么(再次,这是一个非常难以搜索的事情)
我正在尝试使用它的上下文是“执行cmd1,如果成功,执行cmd2”,基本上就是这样:
csc /t:exe /out:a.exe SomeFile.cs && a.exe
对于知道的人来说,这应该是一个简单的回复点,谢谢!
编辑:如果你只是想在一行上运行多个命令而你不在乎第一个是否失败,你可以使用;
对于我的大部分目的来说这很好
例如:kill -n myapp; ./myapp.exe
。
答案 0 :(得分:127)
在CMD中,'&&'表示“执行命令1,如果成功,则执行命令2”。我已将它用于以下内容:
build && run_tests
在PowerShell中,您可以做的最接近的事情是:
(build) -and (run_tests)
它具有相同的逻辑,但命令的输出文本丢失。不过,也许这对你来说还不错。
修改强>
如果您在脚本中执行此操作,则最好将分隔语句分开,例如:
build
if ($?) {
run_tests
}
答案 1 :(得分:27)
&安培;&安培;和||在要实现的事情列表中(仍然是)但没有弹出作为下一个最有用的东西添加。原因是我们有-AND和-OR。 如果您认为这很重要,请在Connect上提出建议,我们会将其视为V3。
答案 2 :(得分:11)
试试这个:
$errorActionPreference='Stop'; csc /t:exe /out:a.exe SomeFile.cs; a.exe
答案 3 :(得分:4)
如果您的命令在cmd.exe中可用(类似python ./script.py
,但不是诸如ii .
这样的PowerShell命令(这意味着通过资源管理器打开当前目录)),则可以在以下命令中运行cmd.exe:电源外壳。语法如下:
cmd /c "command1 && command2"
在这里,&&
由in this question描述的cmd语法提供。
答案 4 :(得分:2)
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 ,并通过在整个命令中返回 false 来证明第二个条件(Get-Content "C:\MyTxt.txt")
从未运行过。
答案 5 :(得分:1)
这个问题很老,但是对于新手来说:也许该问题正在寻找的PowerShell等价物是分号。如上面的示例所示,在不丢失输出的情况下使用&&
的方法如下:
build_command; run_tests_command
答案 6 :(得分:1)
只需安装PowerShell 7(go here,然后滚动并展开资产部分)。 This release已实现管道链运营商。
答案 7 :(得分:0)
我认为简单的if语句可以实现这一点。一旦我看到mkelement0的响应高于最后退出状态存储在$?中,我将以下内容放在一起:
# Set 1st command to variable
$a=somecommand
# Temp var to store exit status of last command (since we can't write to $?)
$test=$?
# Run Test
if ($test=$true) { 2nd-command }
因此对于op的例子,它将是:
a=(csc /t:exe /out:a.exe SomeFile.cs); $test = $?; if ($test=$true) { a.exe }
答案 8 :(得分:0)
通常,在Linux上我会做类似的事情:
ruby -c learn.rb && foodcritic learn.rb
然而,在Windows PS上,不能这样做!所以我最终只是用这个来创建.ps1
文件:
Param(
[string]$fileName
)
ruby -c $fileName
foodcritic $fileName
并将其称为bamemeril.ps1
PS C:\Users\riotc> .\bamemeril.ps1 learn.rb
Syntax OK
Checking 1 files
x
FC011: Missing README in markdown format: ../README.md:1
FC031: Cookbook without metadata.rb file: ../metadata.rb:1
FC071: Missing LICENSE file: ../LICENSE:1
PS C:\Users\riotc>
答案 9 :(得分:0)
冗长的等效项是将$LASTEXITCODE
和-eq 0
组合在一起:
msbuild.exe args; if ($LASTEXITCODE -eq 0) { echo 'it built'; } else { echo 'it failed'; }
我不确定if ($?)
为什么对我不起作用,但是这个对我有用。
答案 10 :(得分:-1)
这取决于上下文,但这里是“-and”的一个例子:
get-childitem | where-object { $_.Name.StartsWith("f") -and $_.Length -gt 10kb }
因此,在文件名以“f”开头的目录中获取大于10kb的所有文件。
答案 11 :(得分:-1)
if (start-process filename1.exe) {} else {start-process filename2.exe}
它比"&&"但是在没有脚本的情况下完成同样的事情并且不难记住。迟到总比不到好。 :)
答案 12 :(得分:-1)
我们可以尝试此命令,而不是使用&&方法
试试{hostname; if($ lastexitcode -eq 0){ipconfig / all | findstr / i bios}}抓住{echo err} finally {}