2019年10月27日日曜日

バッチファイルで管理者権限かどうか調べる

PowerShell の投稿が何回かあったけれど、今でもバッチファイルを使うことはよくある。
バッチファイルで管理者権限か確認して、ユーザー権限なら処理を中断したいという場合はこんな処理を使うらしい。
openfiles > NUL 2>& 1
IF %errorlevel% <> 0 goto userlevel
openfiles は Windows のコマンドで、システムでオープンしているファイルの情報を表示してくれる。管理者権限でのみ動作する。
このコードは管理者権限でのみ動作するという点を利用して管理者権限かユーザー権限のどちらにあるかを判定する。openfiles が管理者権限で実行して終了したとき終了コードは 0 になり、ユーザー権限のため実行できなかったときの終了コードは 1 になる。
コマンドの終了コードは環境変数 errorlevel に格納されるので、バッチファイルの IF 文を使って、errorlevel が 0 でないときは、userlevel 節に処理を移動するという記述が可能。

openfiles の後ろに続く、> NUL 2>&1 の意味は、openfiles コマンドの標準出力(>)は、NUL デバイスに出力する、エラー出力(2>)は標準出力に出力するようにするという意味である。
エラー出力も標準出力も NUL デバイスに出力されるということなので、コマンドプロンプトウィンドウには表示されない。今回はいくつファイルがオープンされているかといった情報は一切不要なので、NUL デバイスに送って捨てているのだ。

一つ一つ意味を考えると理解できるようになる。

出力を隠す部分だが > NUL 2>& 1 ではなく 2>&1 >NUL と書いたらエラー出力は画面に表示されるとのこと。

https://reich.exblog.jp/7216035/

0 件のコメント:

コメントを投稿

ARESのトリニティ(三位一体)

 ARESのトリニティ戦略、どこがトリニティなんでしょう。 まずはデスクトップCADが、WindowsにもMacにもLinux版もあるというトリニティ。 デスクトップCADと、モバイルCAD(ARES Touch)と、ブラウザとサーバーCAD(ARES Kudo)のトリニティ。 ...