thumbnail 一問一答の一歩

Chmod、ChownコマンドをWindowsで実行する方法

ユーザー設定関係に関するlinuxのコマンドとしては以下の2つがある。

  • Chown……ファイルを所有者の情報を変更する
  • Chmod……ファイルの実行権限を持つユ-ザ-を変更する

以下のlinuxコマンドをWindowsのコマンドプロンプト内でも実行できるようにバッチファイルを作成したので紹介する。

1chownコマンドについて

Chownは「Change Owner」の文字の一部がとられている。linuxではファイルの所有者を変更するために使用されており、コマンドは以下のように入力する。

Chown ユーザー名 ファイル名

Windowsでは管理者権限でicalsコマンドを使用すれば同じことはできるが、引数(オプション)の順番が反対になっているため、doskeyで誤魔化すことはできず、バッチファイルを作成する必要がある。

chownを実行出来るようにするために作成するバッチファイルのコ-ドは以下の通りである。

@echo off
icals %2 /setowner %1

2Chmodコマンドについて

Chmodは「Change Mode」の略であり、ファイルの実行権限(パミッション)を変更するために使用されるコマンドである。基本的な使用方法は以下の通りである。

Chmod アクセス権限の設定値 ファイル名

初めに断っておくが、バッチファイルでChmodの一部の再現はできたが、完全再現はできなかった。

chmodを使えるようにするためのバッチファイルのソ-スは以下の通りである。

@echo off
set fir="%1
set fir=%fir%"
echo %fir%│findstr"+ -">null
if %errorlevel%==0
    rem "+か-が使用されていた場合"
    set filename=%2
    set mode=/grant
    for /f "tokens=1,2 delims=+" %%a in(%moji%) do (
    set user=%a
    set permission=%b
    )
)else if %1==777(
     rem "777で指定していた場合"
     set user=Everyone
     set permission=rwx
     set filename=%2
     set mode=/grant:r
)else if %1==666(
     rem "666で指定していた場合"
     set user=Everyone
     set permission=rw
     set filename=%2
     set mode=/grant:r
)else if %1==555(
     rem "555で指定していた場合"
     set user=Everyone
     set permission=rx
     set filename=%2
     set mode=/grant:r
)else if %1==444(
     rem "444で指定していた場合"
     set user=Everyone
     set permission=r
     set filename=%2
     set mode=/grant:r
)else if %1==333(
     rem "333で指定していた場合"
     set user=Everyone
     set permission=rwx
     set filename=%2
     set mode=/grant:r
)else if %1==222(
     rem "222で指定していた場合"
     set user=Everyone
     set permission=w
     set filename=%2
     set mode=/grant:r
)else if %1==111(
     rem "111で指定していた場合"
     set user=Everyone
     set permission=r
     set filename=%2
     set mode=/grant:r
)else if %1==000(
     rem "000で指定していた場合"
     set user=Everyone
     set permission=n
     set filename=%2
     set mode=/grant:r
)else(
     rem "+か-が使用されていた場合"
     set user=%1
     set permission=%2
     set filename=%3
     set mode=/grant:r
)
if %permission%==rwx(
     icacls %filename% %mode% %user%:F
)else if %permission%==rw(
     icacls %filename% %mode% %user%:F
)else if %permission%==rx(
     icacls %filename% %mode% %user%:RX
)else if %permission%==r(
     icacls %filename% %mode% %user%:R
)else if %permission%==wx(
     icacls %filename% %mode% %user%:F
)else if %permission%==w(
     icacls %filename% %mode% %user%:W
)else if %permission%==x(
     icacls %filename% %mode% %user%:RX
)else if %permission%==f(
     icacls %filename% %mode% %user%:F
)else if %permission%==n(
     icacls %filename% %mode% %user%:N
)

一部のみの再現である以上、仕様が一部特殊になっているので以下、仕様を説明する。

○アルファベットを用いてパミッションを指定する場合

  • ユーザー名を直接記載する
  • 権限の追加、変更のみ可能

※削除の実装はできませんでした……

chmod ユーザー名 + rwx ファイル名

○数字を用いてパミッションを指定する場合

以下のように数字が3桁とも全て同じ数字の場合のみ実行可能。

chmod 777 ファイル名

※桁ごとに数字が違う場合は、Windowsにおいて、ファイルの所有者、グループ、その他のひとのユ-ザ-の切り分けができなかったため、実装ができませんでした。

補足:Icaclsは内部コマンドまたは外部……と表示された時の対処法

バッチファイルをいざ作成してみて実行しようとすると、タイトルのエラ-メッセージが発生して実行出来ないことがある。

このことに関しては以下のリンクに分かりやすい説明が載っていたので参照するとよい。

PCコマンドの問題ページに戻る