Tuesday, July 01, 2008

$?変数というものがあります。

これは処理全体が成功した場合にはtrue、それ以外の場合はfalseとなります。

この変数を使用すると、エラーメッセージが表示されなくてもエラーが発生したかどうかを確認できるため、スクリプトの中で使用すると効果を発揮します。

まずは、この変数の動きを見てみましょう。

なにもエラーが発生していない状態で$?変数の中身を確認すると

PS C:\Work> $?
True

上記のようにTrueを返します。

しかし下記のようにエラーを発生させると

PS C:\Work> dir HIRO2.txt
Get-ChildItem : パス 'C:\Work\HIRO2.txt' が存在しないため検出できません。
発生場所 行:1 文字:4
+ dir  <<<< HIRO2.txt
PS C:\Work> $?
False

上記のようにfalseを返します。

ではスクリプトの中でどう使用すればよいか?

1つ例を挙げたいと思います。

下記はdirコマンドを使用していますが、リダイレクトを使用してエラーを変数に代入するようにしています。

このためエラーはコンソールへは表示されません。

エラーメッセージが表示されないので、見た目にはエラーが発生したかどうかを確認できませんが、$?変数の中身を確認すれば、dirコマンドの実行結果が成功したか失敗したかを確認できるので、独自のエラー処理を記述することが可能です。

PS C:\Work>  $ret1 = dir HIRO 2>&1
PS C:\Work> if ( ! $? ) { "エラーが発生しました" }
エラーが発生しました

このように$Error変数や$?変数を使用すれば、エラーに対する処理を記述しやすくなりますので是非活用してみてください。

Tuesday, July 01, 2008 10:06:08 PM (Tokyo Standard Time, UTC+09:00)  #    Comments [1]  |  Trackback
Wednesday, July 02, 2008 1:08:35 AM (Tokyo Standard Time, UTC+09:00)
ふむふむ、非常にためになります。
Comments are closed.

Theme design by Jelle Druyts

Pick a theme: