1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

.bat バッチファイルで sudo もどき

Last updated at Posted at 2019-12-11

これは何

Windows のバッチファイルで、 sudo っぽいことをする方法を紹介します。

  • できること
    • 管理者権限で実行
    • 実行コマンドの終了コード(%errorlevel%)の取得
  • できないこと
    • 現在のコマンドプロンプトで実行。必ず新しいウィンドウが開きます

想定読者

pip や choco コマンドを実行する時、管理者権限つきターミナルを起動し忘れる人

結論

sudo.bat
@echo off
setlocal
if ""=="%~1" exit /b 1
set "cmd=%~1"
if ""=="%~2" goto :parse_end
set "args="
shift
:parse
if not "%~1"=="" (
  set args=%args%,\"%~1\"
  shift
  goto :parse
)
set args=-ArgumentList %args:~1%
:parse_end
powershell -command "exit (start \"%cmd%\" -Wait -PassThru -Verb runas %args%).ExitCode"
exit /b %errorlevel%

使用例

sudo.bat py -m pip install tensorflow

管理者権限のウィンドウが新たに開き、そこで pip が走ります。

感想

実行直後にウィンドウが閉じてしまうため、エラー修了したときの原因を追うのが困難。
pip とか choco とかでしくじったときに確認したいとき使い勝手が悪すぎるぅぅ。
終了コードが取れるだけましだけど、 if errorlevel 1 pause とかでウィンドウを閉じるのを止めたいところと思って、 pause を仕込んでみたけれど start-process が完了したときにウィンドウが閉じてしまっているので意味なかった。
エラーでたら、管理者権限付与した cmd から実行し直すってことで。

参考リンク

Windowsでsudoしたい
How to make SHIFT work with %* in batch files
【Start-Process】PowerShellでプロセスをバックグラウンド起動する方法
Obtaining ExitCode using Start-Process and WaitForExit instead of -Wait
呼び出し元のバッチに戻り値を返す方法

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?