web-dev-qa-db-ja.com

Powershellで&&を取得できますか?

&&はGoogleで検索するのが難しいことで有名ですが、私が見つけた最高のものは この記事 です。これは-andを使用するように言っています。

残念ながら、それ以上の情報は提供されません。また、-andで何をすべきかわかりません(これも、検索が難しいことで有名です)

私がそれを使用しようとしているコンテキストは、「cmd1を実行し、成功したらcmd2を実行する」です。基本的には次のとおりです。

csc /t:exe /out:a.exe SomeFile.cs && a.exe

これは、知っている人への簡単な数回のレップポイントになるはずです、ありがとう!


編集:複数のコマンドを1行で実行するだけで、最初のコマンドが失敗するかどうかを気にしない場合は、;を使用できますほとんどの目的のためにこれは問題ありません

例:kill -n myapp; ./myapp.exe

142
Orion Edwards

2019:Powershellチームは && Powershell-このGitHub PRで計量します

CMDでは、「&&」は「コマンド1を実行し、成功した場合はコマンド2を実行する」ことを意味します。私は次のようなものにそれを使用しました:

build && run_tests

PowerShellでできる最も近いことは次のとおりです。

(build) -and (run_tests)

ロジックは同じですが、コマンドからの出力テキストは失われます。ただし、それで十分かもしれません。

[〜#〜] edit [〜#〜]

スクリプトでこれを行う場合、おそらく次のようにステートメントを分離する方が良いでしょう。

build
if ($?) {
    run_tests
}
136
Jay Bazuzi

&&および||実装するもののリスト(まだあります)に追加されましたが、次に最も有用なものとしてポップアップしませんでした。その理由は、-ANDと-ORがあるためです。重要であると思われる場合は、Connectに提案を提出してください。V3で検討します。

28

これを試して:

$errorActionPreference='Stop'; csc /t:exe /out:a.exe SomeFile.cs; a.exe
11
Ivan

コマンドがcmd.exeで使用できる場合(python ./script.pyのようなもので、ii .のようなPowerShellコマンドではない(つまり、エクスプローラーで現在のディレクトリを開くことを意味します))、PowerShell内でcmd.exeを実行できます。構文は次のとおりです。

cmd /c "command1 && command2"

ここで、&&は、 この質問 で説明されているcmd構文によって提供されます。

4
Tomoyuki Aota

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を返しました。

3番目のテストでは、2番目の条件も分析されていないことが証明されました。

PS C:\> ($MyVar -ne $null) -and (Get-Content "C:\MyTxt.txt")
False

($MyVar -ne $null)falseを返し、2番目の条件を証明しました(Get-Content "C:\MyTxt.txt")コマンド全体でfalseを返すことにより、実行されませんでした。

2
Cleber Machado

非常に古い質問ですが、初心者にとっては、質問が探しているPowerShellバージョン(類似しているが同等ではない)がセミコロンである可能性があります。上記の例のように、出力を失うことなく&&を使用する方法は次のとおりです。

build_command; run_tests_command

1

簡単な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 }
0
slugman

通常、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>
0
Lance Robbins

同等の詳細は、_$LASTEXITCODE_と_-eq 0_を組み合わせることです。

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

if ($?)がうまくいかなかった理由はわかりませんが、これはうまくいきました。

0
TankorSmash