我正在創建一個標準的Windows BAT/CMD文件,我想做一個IF語句來檢查這個CMD文件是否從PowerShell運行。我怎樣才能做到這一點?如何從命令行檢測我是否處於PowerShell中?
編輯:我的根本問題是,test.cmd "A=B"
導致%1==A=B
從CMD運行,但%1==A
和%2==B
從PowerShell中運行時的時候。在這兩種情況下,腳本實際上都是作爲舊的Windows命令行腳本運行的,因此檢查Get-ChildItem總是會產生錯誤。
我正在創建一個標準的Windows BAT/CMD文件,我想做一個IF語句來檢查這個CMD文件是否從PowerShell運行。我怎樣才能做到這一點?如何從命令行檢測我是否處於PowerShell中?
編輯:我的根本問題是,test.cmd "A=B"
導致%1==A=B
從CMD運行,但%1==A
和%2==B
從PowerShell中運行時的時候。在這兩種情況下,腳本實際上都是作爲舊的Windows命令行腳本運行的,因此檢查Get-ChildItem總是會產生錯誤。
的一種方法,它看你的進程名是什麼,然後檢查其屬性:只要你使用的地方測試的唯一名稱
title=test
tasklist /v /fo csv | findstr /i "test"
,應該有錯誤的空間很小。
你會得到這樣的:
「cmd.exe的」, 「15144」, 「控制檯」, 「1」, 「3,284 K」, 「暗戰」, 「GNCID6101 \ Athomsfere」 「0:00:00」, 「測試」
當我運行從一個bat文件上面的代碼,我的輸出是:
「powershell.exe」, 「7396」,」控制檯「,」1「,」50,972 K「,」運行「,」GNCID6101 \ Athomsfere「,」0:00:00 「,」
難道你不能嘗試執行一個Get-ChildItem,然後檢查%ERRORLEVEL%,看看它是否返回一個未找到的exe文件?
請參閱編輯...我想我誤解了這個問題並提出了錯誤的問題,因此您的解決方案將不起作用 – Nilzor 2013-05-04 15:42:30
一個可能更簡單的方法,可能適合你。否則,它可能適合其他人。
test.ps1
和test.cmd
<path>\test
(或只是test
如果文件夾是在PATH環境變量.bat > .cmd
,而PowerShell的優先考慮:.ps1 > .bat > .cmd
以下是輸出一個CMD會話:
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
從Powershell的:
PS C:\Temp> .\test ps1 PS C:\Temp>
我不認爲有一個簡單的方法,除非你看看哪個進程啓動了cmd.exe,即使那樣你也不會捕獲所有的PowerShell運行時。也許如果你能解釋你的目標是什麼,我們可以提出另一種解決問題的方法。 – 2013-05-04 12:24:58
你是對的。請參閱更新 – Nilzor 2013-05-04 15:43:04
http:// stackoverflow。com/questions/4940375/how-do-i-pass-an-equal-sign-when-calling-a-batch-script-in-powershell解釋如何解決該問題 – 2013-05-04 16:10:28