&&
はGoogleで検索するのが難しいことで有名ですが、私が見つけた最高のものは この記事 です。これは-and
を使用するように言っています。
残念ながら、それ以上の情報は提供されません。また、-and
で何をすべきかわかりません(これも、検索が難しいことで有名です)
私がそれを使用しようとしているコンテキストは、「cmd1を実行し、成功したらcmd2を実行する」です。基本的には次のとおりです。
csc /t:exe /out:a.exe SomeFile.cs && a.exe
これは、知っている人への簡単な数回のレップポイントになるはずです、ありがとう!
編集:複数のコマンドを1行で実行するだけで、最初のコマンドが失敗するかどうかを気にしない場合は、;
を使用できますほとんどの目的のためにこれは問題ありません
例:kill -n myapp; ./myapp.exe
。
2019:Powershellチームは &&
Powershell-このGitHub PRで計量します
CMDでは、「&&」は「コマンド1を実行し、成功した場合はコマンド2を実行する」ことを意味します。私は次のようなものにそれを使用しました:
build && run_tests
PowerShellでできる最も近いことは次のとおりです。
(build) -and (run_tests)
ロジックは同じですが、コマンドからの出力テキストは失われます。ただし、それで十分かもしれません。
[〜#〜] edit [〜#〜]
スクリプトでこれを行う場合、おそらく次のようにステートメントを分離する方が良いでしょう。
build
if ($?) {
run_tests
}
&&および||実装するもののリスト(まだあります)に追加されましたが、次に最も有用なものとしてポップアップしませんでした。その理由は、-ANDと-ORがあるためです。重要であると思われる場合は、Connectに提案を提出してください。V3で検討します。
これを試して:
$errorActionPreference='Stop'; csc /t:exe /out:a.exe SomeFile.cs; a.exe
コマンドがcmd.exeで使用できる場合(python ./script.py
のようなもので、ii .
のようなPowerShellコマンドではない(つまり、エクスプローラーで現在のディレクトリを開くことを意味します))、PowerShell内でcmd.exeを実行できます。構文は次のとおりです。
cmd /c "command1 && command2"
ここで、&&
は、 この質問 で説明されているcmd構文によって提供されます。
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を返し、2番目の条件を証明しました(Get-Content "C:\MyTxt.txt")
コマンド全体でfalseを返すことにより、実行されませんでした。
非常に古い質問ですが、初心者にとっては、質問が探しているPowerShellバージョン(類似しているが同等ではない)がセミコロンである可能性があります。上記の例のように、出力を失うことなく&&
を使用する方法は次のとおりです。
build_command; run_tests_command
簡単な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 }
通常、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>
同等の詳細は、_$LASTEXITCODE
_と_-eq 0
_を組み合わせることです。
_msbuild.exe args; if ($LASTEXITCODE -eq 0) { echo 'it built'; } else { echo 'it failed'; }
_
if ($?)
がうまくいかなかった理由はわかりませんが、これはうまくいきました。