それはあなたが使っている方法として、コンパクトとしてはありませんが、以下のように、私は過去に何度も成功裏に使用されてきた別の方法は次のとおりです。
IF EXIST %SYSTEMROOT%\SYSTEM32\WDI\LOGFILES GOTO GOTADMIN
[Whatever commands you want to run if not running as admin]
:GOTADMIN
[Whatever commands you want to run if running as admin]
デフォルトでは、Windowsのみできます、これは動作します高い権限でWDIディレクトリにアクセスします。したがって、存在するはずの別のディレクトリをそのディレクトリ内で探すようにスクリプトに指示することによって、管理者として実行中かどうかを検出することができます。はいの場合は、LOGFILESが存在し、Trueを返します。いいえの場合、WDIファイルへのアクセスは許可されません。したがって、LOGFILESが存在することは認識されず、Falseが返されます。
これは、WDIディレクトリの既定のセキュリティアクセス許可が変更されていない場合にのみ有効ですが、私の経験からはほとんどのインストールでこれらのアクセス許可が変更されている可能性はほとんどありません。また、WDIディレクトリ内のLOGFILESディレクトリが削除されていないか、名前が変更されていないことが必要ですが、WDIディレクトリの目的の不可欠な部分であるため、これはほとんど起こりそうにありません。
私はこれをWindows 7,8、8.1、および10で動作することをテストして確認しました。私はVistaでテストしていませんが、Vistaとどのように似ているかによって動作すると思います。既定ですべてのコマンドプロンプトがそのバージョンのWindowsで最大高度で実行されるため、このメソッドをXPで使用します。
あなたが表示するコマンドに間違いはありません。問題は他の場所にあります。私はerrorlevelの代わりに 'openfiles> nul 2>&1 ||をチェックする代わりに条件付き実行を使用したいwhatever' – LotPings
返事ありがとう、私は試しましたが、それは同じです。 –
問題はまだ表示されていないコードのどこかにあります。私のヒントは問題に関連していませんでした。 [mcve]が何であるかをお読みください。 – LotPings