SQLの窓

2018年03月07日


バッチファイル内で、コマンドプロンプトが管理者権限で実行されているかのチェック

Windows10用WinHlp32.exeインストールバッチファイル というものを見つけて、Windows10 で実行してうまく行ったので、バッチファイルを読んでみたら面白い処理があったので、環境変数を使わないパターンで整理してみました。

@echo off

:check1
for /f "tokens=1 delims=," %%i in ('whoami /groups /FO CSV /NH') do (
	if "%%~i"=="BUILTIN\Administrators" goto :check2
)

echo 管理者グループではありません
goto :end

:check2
for /f "tokens=1 delims=," %%i in ('whoami /groups /FO CSV /NH') do (
	if "%%~i"=="Mandatory Label\High Mandatory Level" goto :admin
)
echo 管理者権限で実行してください
goto :end

:admin

echo 管理者権限で実行しています

:end

/f はファイルを読み込んだりするスイッチですが、コマンドの実行結果も使えるので、ここでのコマンドは whoami です。

引数の /groups /FO CSV /NH は、実行中のユーザが属するグループの一覧を CSV 形式で タイトルヘッダー無しで表示という意味です。

"tokens=1 delims=," は、CSV 形式なので、カンマで分解して先頭の文字列を使うという意味で、結果が %%~i に入るので文字列としてチェックする為に " で挟んで右辺と比較しています。

二つの条件を両方満たしたら、管理者グルーブのユーザが管理者権限で実行している事になります。 

管理者権限のチェックはそれほど重要ではありませんが、バッチファイルでどうしてもいろいろ分岐したい場合に使われるテクニックで、コマンドの結果で判断できるので、レジストリの内容を REG QUERY で取り出して利用も可能です。


※ 管理者権限でないと、High Mandatory Level では無く、Medium Mandatory Level でした。


posted by lightbox at 2018-03-07 17:27 | コマンド : バッチファイル | このブログの読者になる | 更新情報をチェックする

2017年05月20日


デスクトップのアイコン表示を切り替えるバッチファイル

デスクトップを右クリックして表示されるポップアップメニューの、『表示』サブメニューから、『デスクトップアイコンの表示』で切り替える事ができる機能をコマンドプロンプトから可能にします

di.bat
@echo off
cmd "/c echo set o=CreateObject("Shell.Application"):Set osw=o.Windows:Set oie=osw.Item:oie.Document.FolderFlags=CLng(oie.Document.FolderFlags) Xor ^&H00001000 > %TEMP%\_.vbs & wscript.exe %TEMP%\_.vbs"

echo コマンドで、vbscript のコードをテンポラリフォルダに作成して実行するという手法を用いています。

関連する記事

PATH 環境変数の内容をパス毎に改行して表示する pathx.bat ファイルの内容
管理者権限のコマンドプロンプトを開くバッチファイル
バッチファイル : クリップボードからデータを読み込んで表示

VBScript のコード
Set Shell = CreateObject( "Shell.Application" )

Set objShellWindows = Shell.Windows

Set objIE = objShellWindows.Item

objIE.Document.FolderFlags = CLng(objIE.Document.FolderFlags) Xor &H00001000

1) Shell.Application
2) ShellWindows
3) ShellWindows.Item
4) InternetExplorer
5) FOLDERFLAGS enumeration

※ 結局のところ、IE の Document と FolderFlags の関係を記したドキュメントは見つける事ができていません。

Windows 10 でも動作します。また、VBScript のコードをどこかに保存して(di.bat のままだと、コマンドウイドウが一瞬表示されてしまうので)、Wscript で実行するショートカットを作成して、『新規ツールバー』を作成して登録すれば、Quick Launch として使用可能です。







posted by lightbox at 2017-05-20 14:29 | コマンド : バッチファイル | このブログの読者になる | 更新情報をチェックする

2014年11月10日


バッチファイルで、二つのファイルが同じファイルかどうかチェックして if errorlevel で処理を分岐する

※ バイナリでファイルの比較は、FC.EXE で行います。
※ 引数にファイル名を二つ渡します( どちらも拡張子は .txt という前提で省略しています )
※ cmd001.bat というファイルが残りますが、必要なら削除します
※ 先頭で、引数を拾ってコマンドを作成する必要があります

先頭で作成されるファイル(cmd001.bat)の中身は以下のようになります
@echo off 
fc /b 001.txt 002.txt 
これを 26行目 で実行して、その結果の文字列によって処理を分岐します
@echo off
echo @echo off > cmd001.bat
echo fc /b %1.txt %2.txt >> cmd001.bat
REM ***********************************************
REM コマンドの先頭の @ は、そのコマンドの表示を抑制
REM echo off は以降のコマンドの表示を抑制
REM ***********************************************

REM ***********************************************
REM サブルーチンの呼び出し
REM ***********************************************
call :GetFC
if errorlevel 1 ( Call :CheckOk ) else ( Call :CheckErr )

REM ***********************************************
REM 処理の終わり
REM ***********************************************
goto end



REM ***********************************************
REM サブルーチン
REM ***********************************************
:GetFC
for /F "delims=: tokens=2" %%i in ('call cmd001.bat') do (
	if "%%i"==" 相違点は検出されませんでした" (
		exit /B 1
	)
)
exit /B 0

:CheckOk
echo ファイルは一致しました
echo 作業を続けて下さい
exit /B

:CheckErr
echo ファイルは一致しませんでした
echo 作業を中止して下さい
exit /B


REM ***********************************************
REM 記述の終わり
REM ***********************************************
:end


関連する記事

バッチファイル内の Call コマンドによるサブルーチンの呼び出し


posted by lightbox at 2014-11-10 14:57 | コマンド : バッチファイル | このブログの読者になる | 更新情報をチェックする
Seesaa の各ページの表示について
Seesaa の 記事がたまに全く表示されない場合があります。その場合は、設定> 詳細設定> ブログ設定 で 最新の情報に更新の『実行ボタン』で記事やアーカイブが最新にビルドされます。

Seesaa のページで、アーカイブとタグページは要注意です。タグページはコンテンツが全く無い状態になりますし、アーカイブページも歯抜けページはコンテンツが存在しないのにページが表示されてしまいます。

また、カテゴリページもそういう意味では完全ではありません。『カテゴリID-番号』というフォーマットで表示されるページですが、実際存在するより大きな番号でも表示されてしまいます。

※ インデックスページのみ、実際の記事数を超えたページを指定しても最後のページが表示されるようです

対処としては、このようなヘルプ的な情報を固定でページの最後に表示するようにするといいでしょう。具体的には、メインの記事コンテンツの下に『自由形式』を追加し、アーカイブとカテゴリページでのみ表示するように設定し、コンテンツを用意するといいと思います。


※ エキスパートモードで表示しています

アーカイブとカテゴリページはこのように簡単に設定できますが、タグページは HTML 設定を直接変更して、以下の『タグページでのみ表示される内容』の記述方法で設定する必要があります

<% if:page_name eq 'archive' -%>
アーカイブページでのみ表示される内容
<% /if %>

<% if:page_name eq 'category' -%>
カテゴリページでのみ表示される内容
<% /if %>

<% if:page_name eq 'tag' -%>
タグページでのみ表示される内容
<% /if %>
この記述は、以下の場所で使用します
container 終わり

フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
BUTTONS (CSS でボタン)
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり