2013-05-04 6 views
5

私は標準のWindows BAT/CMDファイルを作成しています。このCMDファイルがPowerShellから実行されているかどうかを確認するIF文を作成します。どうやってやるの?私はコマンドラインからPowerShellに入っているかどうかを検出できますか?

編集:私の根本的な問題は、%1==A=Btest.cmd "A=B"結果はCMDから実行したときにということでしたが、%1==A%2==B PowerShellのから実行します。どちらの場合も、スクリプト自体は古いWindowsコマンドラインスクリプトとして実際に実行されるため、Get-ChildItemをチェックすると常にエラーが発生します。

+1

cmd.exeを起動したプロセスを見てからpowershellランタイムをすべて捕まえない限り、簡単な方法はないと思います。あなたの目標が何であるかを説明できれば、あなたの問題を解決する別の方法を提案することができます。 –

+0

あなたは正しいです。 update – Nilzor

+2

http:// stackoverflowを参照してください。com/questions/4940375/how-do-i-pass-an-equal-sign-call-a-batch-script-in-powershellで回避方法について説明します –

答えて

5

一つの方法、それはあなたのプロセス名が何であるかを参照して、その属性をチェックします

title=test 
tasklist /v /fo csv | findstr /i "test" 

限り、あなたはテストの代わりに一意の名前を使用して、そこにする必要がありますエラーのための小さな部屋。

あなたはバックのようなものでしょう:

"cmd.exeの"、 "15144"、 "コンソール"、 "1"、 "3284 K"、 "実行"、 "GNCID6101 \ Athomsfereを"私はbatファイルから上記のコードを実行したときに、 "午後12時00分00秒"、 "テスト"

は、私の出力は:

"たpowershell.exe"、 "7396"、」コンソール、1、50,972 K、実行中、GNCID6101 \ Athomsfere、0:00:00 "、"

+0

例外を除いて、 PowerShellの.CMDファイルは実際には "古い"コマンドラインスクリプトとして実行されます。 title = testは有効なコマンドです。いずれのコマンドもどちらのシェルでもエラーを生成しません – Nilzor

+0

あなたは正しいです!私の編集を参照してください。 –

+0

あなたが「powershell」を探して見つけたら、Powershellにいるのは分かりますか?私はあなたがより単純な解決策を持っていない限り、grepをWindowsなどのために使うことができると思います。 – Nilzor

0

Get-ChildItemを実行して%ERRORLEVEL%をチェックして、EXEが返されないかどうかを確認できませんでしたか?

http://ss64.com/nt/errorlevel.html

+0

編集を参照してください...私は問題を誤解して間違った質問をしたので、あなたの解決策はうまくいきません。 – Nilzor

0

潜在的に簡単な方法があります。もしそうでなければ、他の人には適しているかもしれません。

  1. 2つの別々のスクリプトファイルを作成します。スクリプトを呼び出す際test.ps1test.cmd
  2. は、拡張子を含めないでください。私。フォルダがPATH環境変数にある場合<path>\test(または単にtestとして呼び出す
  3. CMDのように実行するスクリプトを優先しているため、この作品:PowerShellを優先し、一方、.bat > .cmd.ps1 > .bat > .cmd

次が出力されますCMDセッション:PowerShellのから

 
C:\Temp>copy con test.cmd 
@echo cmd^Z 
     1 file(s) copied. 

C:\Temp>copy con test.ps1 
Write-Output "ps1"^Z 
     1 file(s) copied. 

C:\Temp>.\test 
cmd 

C:\Temp> 

、呼び出しtest

 
PS C:\Temp> .\test 
ps1 
PS C:\Temp> 
関連する問題