为什么不Powershell If Statement评估命令的退出状态?

时间:2015-04-10 13:22:43

标签: bash powershell

在bash中,我可以这样做:

if cd $some_directory; then
    rm *
else
    echo "Could not change directory! Aborting." 1>&2
    exit 1
fi

如果退出状态为0,则将执行if语句,因为if会评估退出状态。

为什么Powershell if声明没有做同样的事情?如果我想检查退出状态,我必须检查$?之后评估为真或假。

2 个答案:

答案 0 :(得分:0)

If语句正在评估输出流的结果,而不是错误流。如果要评估If中的错误流,请重定向错误流:

if (cd $some_directory 2>&1)
  {echo "Could not change directory! Aborting." }

默认情况下,Powershell cmdlet不会将结果状态输出到输出流,因为通常您将沿着管道将结果发送到期望特定对象类型的cmdlet和函数,并且您不需要&# 39;那些状态代码污染该流的是什么。

答案 1 :(得分:-1)

在PowerShell中,您使用Test-Path $some_directory检查文件夹是否存在。它返回一个布尔值。

这样看起来像这样,同时避免在失败的cd语句上抛出任何错误。 在失败的声明中捕获退出代码比IMO更清晰。

if (test-path $some_directory) {
   cd $some_directory
   del *
} else {
  echo "Could not change..."
}