windows – PowerShellで1行に複数のコマンドを実行するには?

command-line powershell windows

cmdプロンプトでは、このように1行に2つのコマンドを実行することができます

ipconfig /release & ipconfig /renew

このコマンドをPowerShellで実行すると、こうなります

Ampersand not allowed. The `&` operator is reserved for future use

PowerShellには、cmdプロンプトで&に相当するものを素早く生成するための演算子はありますか?

2つのコマンドを1行で実行する方法は何でもいいです。スクリプトが作れるのは知っていますが、もう少し突飛なものを探しています

  367  David  2013-06-26


ベストアンサー

PowerShell でコマンドを連鎖させるにはセミコロンを使用します

ipconfig /release; ipconfig /renew

516  Squeezy  2013-06-26


前の回答で述べたように、コマンドをセミコロンでリンクしますが、MS-DOSスタイルのコマンドインタプリタの&演算子での動作には重要な違いがあります

コマンドインタプリタでは、変数の置換は行の読み込み時に行われます。これにより、変数の入れ替えなど、いくつかのすっきりとした可能性が可能になります

set a=1
set b=2
set a=%b% & set b=%a%
echo %a%
echo %b%

結果として

2
1

私の知る限りでは、この動作をPowerShellで再現する方法はありません。それが良いことだと主張する人もいるかもしれません

実はPowerShellにはこれを行う方法があります

$b, $a = $a, $b

その結果、変数の値が一行で入れ替わることになります

35  Dave_J  2013-09-10


PowerShell 7 には Pipeline chain operators があり、逐次的な一行コマンドに条件付きの要素を追加することができます

演算子は

  • && これは、最初のコマンドが成功した場合にのみ、2番目のコマンドを実行します
  • || これは、最初のコマンドが失敗した場合にのみ、2番目のコマンドを実行します

examples:

PS Z:\Powershell-Scripts> Write-Host "This will succeed" && Write-Host "So this will run too"
This will succeed
So this will run too

PS Z:\Powershell-Scripts> Write-Error "This is an error" && Write-Host "So this shouldn't run"
Write-Error "This is an error" && Write-Host "So this shouldn't run": This is an error

PS Z:\Powershell-Scripts> Write-Host "This will succeed" || Write-Host "This won't run"
This will succeed

PS Z:\Powershell-Scripts> Write-Error "This is an error" || Write-Host "That's why this runs"
Write-Error "This is an error" || Write-Host "That's why this runs": This is an error
That's why this runs

もちろん、x && y || zなどのようにさらに連鎖させることもできます

これは ipconfig のような古い cmd ライクなコマンドでも動作します

PS Z:\Powershell-Scripts> ipconfig && Write-Error "abc" || ipconfig


Windows-IP-Konfiguration


Ethernet-Adapter Ethernet:

Verbindungsspezifisches DNS-Suffix: xxx
Verbindungslokale IPv6-Adresse  . : xxx
IPv4-Adresse  . . . . . . . . . . : xxx
Subnetzmaske  . . . . . . . . . . : 255.255.255.0
Standardgateway . . . . . . . . . : xxx
ipconfig && Write-Error "abc" || ipconfig: abc

Windows-IP-Konfiguration


Ethernet-Adapter Ethernet:

Verbindungsspezifisches DNS-Suffix: xxx
Verbindungslokale IPv6-Adresse  . : xxx
IPv4-Adresse  . . . . . . . . . . : xxx
Subnetzmaske  . . . . . . . . . . : 255.255.255.0
Standardgateway . . . . . . . . . : xxx

これらの演算子は、$? と $LASTEXITCODE 変数を使用して、パイプラインが失敗したかどうかを判断します。これにより、コマンドレットや関数だけでなく、ネイティブ コマンドでも使用することができます

ソースは以下の通りです。https://docs.microsoft.com/en-us/powershell/scripting/whats-new/what-s-new-in-powershell-70?view=powershell-7

6  SimonS  2020-03-16


タイトルとURLをコピーしました