2012-05-17 28 views
20

在Powershell中$?是什么意思?


编辑:TechNet answers的同义反复,没有解释什么是 '成功' 或 '失败' 的意思。

$?
包含上次操作的执行状态。如果上次操作成功,则它包含TRUE,如果失败,则包含FALSE。

我推定$?会简单地测试$ LastExitCode是否为0,但我发现counter example其中$?是False,但$ LastExitCode是True。

回答

23

如果最后一条命令成功则返回true否则返回false

但是,有一些警告和非显而易见的行为(例如,“成功”的含义是什么)。我强烈建议您阅读this article进行更全面的治疗。

例如,考虑调用Get-ChildItem。

PS> Get-ChildItem 

PS> $? 
    True 

$?将调用Get-ChildItem成功返回True

但是,如果您在不存在的目录上调用Get-ChildItem,它将返回一个错误。

PS> Get-ChildItem \Some\Directory\Which\Does\Not\Exist 
    Get-ChildItem : Cannot find path 'C:\Some\Directory\Which\Does\Not\Exist' because it does not exist. 

PS> $? 
    False 

$?将返回False,因为上一个命令不成功。

+0

什么命令? –

+0

@MattHickford命令是使用Powershell执行的。例如,它可以是cmdlet或可执行文件。看看我已经添加的例子。 –

+0

'成功'是什么意思?你认为这意味着'如果且仅当$ LastExitCode是0'? –

3

$?如果最后一条命令导致错误,将包含$false。如果没有,它将包含$true。在PowerShell v1天内,这是进行错误处理的常用方式。例如,在一个脚本,如果你想检查一个文件是否存在,然后打印自定义消息,如果没有,你可以这样做:

Get-Item -Path john -ErrorAction silentlycontinue; 
if(-not $?) 
{ 
    'could not find file.'; 
    exit 
}` 
+2

现在人们在做什么呢? – mikemaccana

+1

@mikemaccana,在这里的同一条船上....我会想想try/catch语句。 – Johnrad

相关问题