【コードあり】管理者権限でbatファイルを開きなおす処理の解説

パソコン&スマホ
スポンサーリンク

WindowsのPCで使用できる「batファイル」は特定の処理を自動化することが出来るので、頻繁に行う処理などをbatファイルで作成しておけば毎回同じ作業をする手間が省けて便利です。

ただ、batファイルで行う処理によっては「管理者権限でbatファイルを実行しないと正常に動作しない」となることも多いです。

その場合、batファイルを「右クリック→管理者権限で実行」を行うことでbatファイルを管理者権限で実行することが出来ますが、これを忘れて普通のファイル同様ダブルクリックで実行してしまうこともあると思います。

この記事ではそうしたケースに対して「batファイルが管理者権限で開かれていない場合、自動的に管理者権限で再実行する」という処理の解説を行います。

batファイルを管理者権限で開きなおす処理

では、ここからは「管理者権限でbatファイルを開きなおす処理」の解説を行います。

この処理をbatファイルの冒頭に入れておけば、間違えてダブルクリック等でbatファイルを起動した時でも自動的に管理者権限で開きなおしてくれます。

基本処理

こちらがbatファイルを管理者権限で開きなおす処理です。

@echo off
net file >nul 2>&1 || (powershell -Command "Start-Process '%~f0' -Verb RunAs" & exit /b)

echo 管理者権限で実行中...
REM ここに管理者権限で実行する処理を書く
pause

なお、前提条件としてpowershellがインストールされていないPCだと動作しないです。

Windows7以降のPCなら標準でpowershellは搭載されていますが、もし正常に動作しない場合はpowershellが利用可能か確認してください。

解説

上記の処理をざっくり要約すると、「管理者権限が必要なnet fileコマンドが失敗した場合、powershellを使用して現在のbatファイルを管理者権限で開きなおす」という処理です。では、詳しく解説を行います。

① net file >nul 2>&1 net file
batファイルを開いた時に管理者権限を持っているかどうかを判定するための処理です。本来は使用中の共有ファイルを確認するためのコマンドですが、管理者権限がない状態で使用するとエラーが出るため、このコマンドの成否を確認することで管理者権限があるか無いかを判断します。

② ||
こちらは「左側のコマンドが失敗した場合に右側のコマンドを実行する」という意味を持ちます。前に実行したnet fileコマンドがエラー(管理者権限以外で実行された場合など)になったときに、次の処理を実行するという処理です。

③ (powershell -Command “Start-Process ‘%~f0’ -Verb RunAs” & exit /b)
要約すると「powershellで管理者権限を付けて現在のbatファイルを開きなおす」という処理です。コード中の「’%~f0’」は現在開いているbatファイルのフルパスで、「-Verb RunAs」が管理者権限でプロセスを実行するオプションとなります。

要約すると、①で「batファイルが管理者権限で実行されているかどうか確認」して、②と③で「管理者権限じゃない時に、再度管理者権限を付けてbatファイルを開きなおす」という処理を作成しています。

注意点

上記コードを使用する際の注意点として、batファイルの文字コードは「Shift_JIS」で保存する必要があります。

メモ帳などのテキストエディタでファイルを保存するときのデフォルトの文字コードは「UTF-8」であることが多いですが、UTF-8で保存されたbatファイルを実行すると日本語が文字化けしてエラーが起こってしまいます。

Shift_JISで保存する場合、メモ帳等でコードを入力した後に「名前を付けて保存」→「文字コード」の項目から「ANSI」を選ぶことでShift_JISでの保存が可能です。

もし「コードは正しいはずだけどなぜか処理に失敗する」となってしまった場合、こちらの文字コードの設定が間違っていないか確認してください。

タイトルとURLをコピーしました