UN*X系のターミナルで稼働したときのシェルで、SHELL
のような環境変数があれば区別し易そうなものですが、PowerShell、コマンドプロンプト共に見当たりませんね。COMSPEC
環境変数が使えるかと思いましたが、PowerShell下でも存在しました。
PowerShell
1PS C:> $ENV:COMSPEC
2C:\WINDOWS\system32\cmd.exe
3PS C:>
ではどうしたら良いのかと言えば、PowerShellでしか効かない、例えば$Env
コマンドレットを実行したときの挙動で見てもよいかもしれません。$?
で終了ステータスが確認できます。
PowerShell
1PS C:\Users\user01> $env
2PS C:\Users\user01> $?
3True
4PS C:\Users\user01>
コマンドプロンプト上ではそもそも$Env
と言うコマンド入力ではエラーになります。エラーメッセージがうっとうしいのであれば、nul
デバイスにリダイレクトしてしまえば良いと思います。
CMD
1C:\Users\user01>$env
2'$env' は、内部コマンドまたは外部コマンド、
3操作可能なプログラムまたはバッチ ファイルとして認識されていません。
4
5C:\Users\user01>echo %errorlevel%
69009
7
8C:\Users\user01>$env > nul 2>&1
9
10C:\Users\user01>echo %errorlevel%
119009
12
13C:\Users\user01>
PowerShell、コマンドプロンプトそれぞれの挙動の違いから判断するのであれば、$Env
コマンドレットに限りませんけれども。