我正在创建一个标准的Windows BAT / CMD文件,我想制作一个IF语句来检查这个CMD文件是否是从PowerShell运行的。我怎么能这样做?
编辑:我的根本问题是test.cmd "A=B"
从CMD运行时产生%1==A=B
,而从PowerShell运行时%1==A
和%2==B
结果为{{1}}。在这两种情况下,脚本本身实际上都是作为旧的Windows命令行脚本运行的,因此检查Get-ChildItem将始终产生错误。
答案 0 :(得分:5)
一种方法是查看您的进程名称,然后检查其属性:
title=test
tasklist /v /fo csv | findstr /i "test"
只要您使用唯一名称代替Test,就应该没有错误的余地。
你会得到类似的东西:
“cmd.exe的”, “15144”, “控制台”, “1”,“3284 K”, “运行”, “GNCID6101 \ Athomsfere”, “0:00:00”, “测试”
当我从bat文件运行上面的代码时,我的输出是:
“powershell.exe”, “7396”, “控制台”, “1”,“50972 K “ ”运行“, ”GNCID6101 \ Athomsfere“, ”0:00:00“,”
答案 1 :(得分:2)
一种可能对您有用的潜在简单方法。如果没有,它可能适合其他人。
test.ps1
和test.cmd
<path>\test
(或仅test
。.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>
从Powershell致电test
:
PS C:\Temp> .\test ps1 PS C:\Temp>
答案 2 :(得分:0)
你不能尝试执行Get-ChildItem,然后检查%ERRORLEVEL%以查看它是否返回未找到的exe吗?