カレントディレクトリーで管理者コマンドプロンプトを開くsudoもどきを作った(引数付き)
はじめに
初投稿です
こんなことを解決出来るように作りました
- windowsでもsudoコマンドぽいの使いたい
- カレントディレクトリーで開きたい(
C:\Windows\System32
で開きたくない) - 引数つけたい
- GUIアプリケーションを起動した時にコマンドプロンプトを起動したくない
- もっとLinuxぽく使いたい(
sudo su
とか打つと管理者コマンドプロンプトが起動する)
前提条件
- PATHの通し方を知っている事
- バッチファイルを作成出来る事
実行環境
Windows 10 OSビルド 17763.253 (PowerShellが入っていればどの端末でも動くと思われ)
作り方
以下のコマンドのバッチファイルを作成しPATHを通す
sudo.bat
@echo off
REM 管理者権限でコマンドプロンプトを開く
if "%1"=="cmd" (
powershell -NoProfile start-process cmd -ArgumentList '/k ""cd /d %CD%""'-verb runas
exit /B
)
if "%1"=="su" (
powershell -NoProfile start-process cmd -ArgumentList '/k ""cd /d %CD%""'-verb runas
exit /B
)
if "%~x1"==".exe" (
powershell -NoProfile Start-Process %1 -ArgumentList '"%2" "%3" "%4" "%5" "%6" "%7" "%8" "%9" ' -Verb Runas
exit /B
)
REM コマンドはcmd.exeに流して実行
if not "%1"=="" (
powershell -NoProfile Start-Process cmd -ArgumentList '/K ""cd /d %CD%"" "&" "%1" "%2" "%3" "%4" "%5" "%6" "%7" "%8" "%9" ' -Verb Runas
) else (
rem 引数がなければエラーを返す
echo コマンド構文が間違っています 1>&2
echo sudo [実行するコマンド][実行するコマンドにつける引数] 1>&2
exit /B
)
sudo dir
とか出来たら成功
構文
sudo [実行するコマンド][実行するコマンドにつける引数]
説明
- このPowerShellコマンドでコマンドプロンプトを管理者権限で実行
powershell -NoProfile Start-Process cmd -Verb Runas
-
-ArgumentList
オプションでcmd.exe
に追加する引数を追加
-
&
はコマンドプロンプトでコマンドを連続して実行する際に使う
-
""cd /d %CD%""
でカレントディレクトリーで実行
- 引数は最大9個までつけられる
"%1" "%2" "%3" "%4" "%5" "%6" "%7" "%8" "%9"
sudo [実行するコマンド][実行するコマンドにつける引数]
- このPowerShellコマンドでコマンドプロンプトを管理者権限で実行
powershell -NoProfile Start-Process cmd -Verb Runas
-
-ArgumentList
オプションでcmd.exe
に追加する引数を追加 -
&
はコマンドプロンプトでコマンドを連続して実行する際に使う -
""cd /d %CD%""
でカレントディレクトリーで実行 - 引数は最大9個までつけられる
"%1" "%2" "%3" "%4" "%5" "%6" "%7" "%8" "%9"
※$*
がなぜか使えない…
もっとLinuxぽく使いたい
- 引数に
su
とcmd
を入れたら管理者コマンドプロンプトが起動するようにしたい
-
if
文で第一引数がsu
or cmd
の時に起動するようにする
-
sudo cmd
sudo su
とか出来るようになる
- エラーを表示したい
- 引数無しで呼び出された時にエラーを表示
- 引数をつけるよう促す文を標準エラー出力に表示
- 標準出力を標準エラー出力にリダイレクトし、表示する
1>&2
sudo.bat
@echo off
rem 管理者権限でコマンドプロンプトを開く
if "%1"=="cmd" (
powershell -NoProfile start-process cmd -ArgumentList '/k easy "&" ""cd /d %CD%""'-verb runas
exit /B
)
if "%1"=="su" (
powershell -NoProfile start-process cmd -ArgumentList '/k easy "&" ""cd /d %CD%""'-verb runas
exit /B
)
rem コマンドはcmd.exeに流して実行
if not "%1"=="" (
powershell -NoProfile Start-Process cmd -ArgumentList '/K ""cd /d %CD%"" "&" "%1" "%2" "%3" "%4" "%5" "%6" "%7" "%8" "%9" ' -Verb Runas
) else (
rem 引数がなければエラーを返す
echo コマンド構文が間違っています 1>&2
echo sudo [実行するコマンド][実行するコマンドにつける引数] 1>&2
exit /B
)
GUIアプリケーションを起動した時にコマンドプロンプトを起動したくない
su
とcmd
を入れたら管理者コマンドプロンプトが起動するようにしたい
-
if
文で第一引数がsu
orcmd
の時に起動するようにする -
sudo cmd
sudo su
とか出来るようになる
- 引数無しで呼び出された時にエラーを表示
- 引数をつけるよう促す文を標準エラー出力に表示
- 標準出力を標準エラー出力にリダイレクトし、表示する
1>&2
sudo.bat
@echo off
rem 管理者権限でコマンドプロンプトを開く
if "%1"=="cmd" (
powershell -NoProfile start-process cmd -ArgumentList '/k easy "&" ""cd /d %CD%""'-verb runas
exit /B
)
if "%1"=="su" (
powershell -NoProfile start-process cmd -ArgumentList '/k easy "&" ""cd /d %CD%""'-verb runas
exit /B
)
rem コマンドはcmd.exeに流して実行
if not "%1"=="" (
powershell -NoProfile Start-Process cmd -ArgumentList '/K ""cd /d %CD%"" "&" "%1" "%2" "%3" "%4" "%5" "%6" "%7" "%8" "%9" ' -Verb Runas
) else (
rem 引数がなければエラーを返す
echo コマンド構文が間違っています 1>&2
echo sudo [実行するコマンド][実行するコマンドにつける引数] 1>&2
exit /B
)
※firefoxにPATHが通っている事にして話しています
sudo firefox
と実行すると管理者コマンドプロンプトも起動してしまう。
引数に拡張子付き(.exe
)で指定した場合、第一引数を直接管理者権限で実行するように変更
if
文で.exe
がついているか判定(%~x1
で引数から拡張子だけを取得できる)
sudo firefox.exe
sudo.bat
if "%~x1"==".exe" (
powershell -NoProfile Start-Process %1 -ArgumentList '"%2" "%3" "%4" "%5" "%6" "%7" "%8" "%9" ' -Verb Runas
exit /B
)
誰かもっといい方法ありませんか…
Author And Source
この問題について(カレントディレクトリーで管理者コマンドプロンプトを開くsudoもどきを作った(引数付き)), 我々は、より多くの情報をここで見つけました https://qiita.com/nanagami1369/items/c5b923ec5d29c0267bc6著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .