SQLの窓

2014年03月01日


他のアプリケーションを『管理者権限』で実行するコマンドライン

厳密には、テンポラリフォルダに VBScript のコードを作成しますが、バッチ処理でコマンドを実行する時に『管理者権限』を与えたい場合はこれで対処できると思います。

taskmgr は一例です。taskmgr のところに実行したいアプリケーション( exe ) をセットします。

"taskmgr","" の左の文字列は、実行アプリケーションで、右の文字列は引数の文字列を指定します

Shell.ShellExecute method
cmd "/c echo set o=CreateObject("Shell.Application"):o.ShellExecute "taskmgr","","","runas",1 > %TEMP%\_.vbs & wscript.exe %TEMP%\_.vbs"
Windows7 では、taskmgr.exe が管理者権限で実行されると、新しいタスクの作成ダイアログに『このタスクに管理者特権を付与して作成します』チェックボックスが現れます





posted by lightbox at 2014-03-01 22:42 | コマンド : コマンド | このブログの読者になる | 更新情報をチェックする

2014年02月19日


コマンドプロンプト(実質はVBScript)で、クリップボードの内容をファイルに出力する

もう、正式なドキュメントを見つけるのは困難ですが、以下のように、mshta.exe を使って、引数に URL の変わりに認識される vbscript: によって、VBScript を実行してクリップボードにアクセスしています。

コマンドプロンプト上の & はそのままではコマンドプロンプトの特殊記号なので ^ でエスケープしていますが、cmd.exe /c 以降で使う場合は、 /c 以降の内容を "(ダブルクォート) で囲う必要があるので注意して下さい。

str と "" を連結しているのは、str が null 等のエラーとなる可能性の値を無条件に文字列と変換する為です。( %temp% はテンポラリフォルダという認識で使用しています )
mshta.exe "vbscript:Execute("str=window.clipboardData.getData(""text""):CreateObject(""Scripting.FileSystemObject"").GetStandardStream(1).Write(str^&""""):close")" > %temp%\clip.txt
Windows7 では、クリップボードへの書き込みは clip.exe で容易に可能ですが、読込みは他のアプリケーションの力を借りないと実現しません。例えば、VBScript 内で実行するのであれば、InternetExplorer.Application を使った以下のような方法も存在します。

※ clipboardData オブジェクトには、getData と setData メソッドがあります

これは、Hey, Scripting Guy! でも紹介されている結構確実な方法で、これ以前より IE を利用したアプリケーションを作成しているプログラマにとっては常識のような内容でした。ただ、昔は IE の性能や PC の性能も悪かったので必ず成功していたかどうかはちょっと疑問が残ります( たぶん今は大丈夫だと思います )
※ Busy プロパティを使用した記述

ただ、セキュリティ上の理由により、デフォルトのインターネット設定では以下のようなダイアログが出てしまうのでそのままではバッチ処理には使えませんので注意が必要です。


Set objIE = CreateObject("InternetExplorer.Application")
objIE.Navigate("about:blank")
strText = objIE.document.parentWindow.clipboardData.GetData( "Text" ) & ""
objIE.Quit

Wscript.Echo strText

さらに、正式なドキュメントを見つける事はできませんでしたが、レジストリ情報からすると、どうやら Office 関連の COM らしい htmlfile というものが存在します。( 一応知識として知っておくといいと思います。/ セキュリティの問題はありません )
' Get clipboard text
Set objHTML = CreateObject("htmlfile")
text = objHTML.ParentWindow.ClipboardData.GetData("text")
VBScript を中心に考えると、最初のコマンドラインを実行した後に、パイプで cscript.exe をつなげて、VBScript 内で標準入力を読み込むという方法もあります。
mshta.exe "vbscript:Execute("str=clipboardData.getData(""text""):CreateObject(""Scripting.FileSystemObject"").GetStandardStream(1).Write(str^&""""):close")"|cscript //nologo g.vbs

g.vbs
Dim Input:Input=""
Do While Not WScript.StdIn.AtEndOfStream
	Input=Input&WScript.StdIn.ReadAll
Loop
WScript.Echo Input
Visual Studio が使える場合は、以下のリンク先の手順で自作 COM を作成して利用可能です

VB.net(VS2010) で COM へ公開して、WSH(VBScript) で利用する( C# でも同様 )

▼ C# によるテストコード
namespace ClassCom
{
    public class Class1
    {
        Microsoft.VisualBasic.Devices.Computer pc = new Microsoft.VisualBasic.Devices.Computer();
        public string Clipboard
        {
            get {
                return pc.Clipboard.GetText();
            }
            set {
                pc.Clipboard.SetText( value );
            }
        }
    }
}

▼ 実行
Set obj = Wscript.CreateObject("ClassCom.Class1")

Wscript.Echo obj.Clipboard
posted by lightbox at 2014-02-19 00:00 | コマンド : コマンド | このブログの読者になる | 更新情報をチェックする

2014年01月07日


コマンドプロンプトで XML整形


http://xmlsoft.org/sources/win32/
( リンク元は http://xmlsoft.org/downloads.html の win32 )

から。

libxml2-2.7.8.win32.zip
iconv-1.9.2.win32.zip
zlib-1.2.5.win32.zip

をダウンロード。

解凍して、libxml の bin に
iconv.dll と zlib1.dll をコピーして、

xmllint --format 入力ファイル名 --output 出力ファイル名


※ 入力ファイル名には url を指定可能です


タグ:レア xml ツール
posted by lightbox at 2014-01-07 21:43 | コマンド : コマンド | このブログの読者になる | 更新情報をチェックする

2013年12月11日


VBS : バッチ処理でディレクトリ(ファイル)の権限を追加したり削除したりする方法

※ システム的に重大な処理なので、自信のない場合は使用せずに、GUI で指定して下さい


通常、Windows の既存のディレクトリ( マイ ドキュメント等 ) に追加でディレクトリを作成すると上記画像のようになると思います。

通常ならはこれて十分なのですが、サーバーアプリケーション(WWWサーバー等) の場合、現在ログインしているユーザとは別のユーザで処理されるので、ほぼ確実にこのままでは問題が出ます。

GUI でこのまま追加して権限を与えれば良いのですが、結構煩雑で管理上スマートでもありません。そこで、Microsoft が提供してくれている、VBScript のツールを使用します
( Extended Change Access Control List Tool (Xcacls) )

使用する前の準備

まず、ダウンロードして解凍(実行すると解凍されます)すると、Xcacls.vbs が現れるので、パスの通ったディレクトリに移し、同じディレクトリに以下のようなバッチファイルを作成します( 仮に vbscacls.bat とします )

Windows7 で使用するには、3400 行目を Case "5.0", "5.1", "5.2", "6.1" に変更します( 6.1 が Windows7 )
cscript.exe %~dp0XCACLS.vbs %1 /E %2 %3 %4 %5 %6 %7 %8 %9

第一引数は、必ず対象のディレクトリかファイルで、/E が修正モードという意味で、これが無いと既存の情報が削除されてしまいます

追加

通常、ユーザーを単独で追加するよりグループを追加して対応します。Users で フルコントロールを与えれば、自分の PC としては問題は無いと思いますので、以下のようなパラメータで実行します( カレントディレクトリが対象 )
VBSCACLS "%CD%" /P users:F


削除

指定したグループ(ユーザ)のみ削除されます
VBSCACLS "%CD%" /R users


補足情報

Windows7 用に変更しないと、以下のようなメッセージが出力されます
C:\TEMP>VBSCACLS "%CD%" /P users:F

C:\TEMP>cscript.exe C:\Windows\XCACLS.vbs "C:\TEMP" /E /P users:F
Microsoft (R) Windows Script Host Version 5.8
Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.

Starting XCACLS.VBS (Version: 5.2) Script at 2013/12/11 9:54:57

************************************************
* Script not tested on this version of Windows *
************************************************

This script hasn't been tested on version "6.1" of Windows.

Currently, the script has been tested on the following:
            Win2000, WinXP, Win2003

Previous versions of Windows NT can use:
"XCACLS.EXE" from the NT 4.0 Resource Kit.

For more recent versions, there may be an update to this script.
Please contact David Burrell (dburrell@microsoft.com)

Note: WMI must be installed for this script to function.
If you need to run this script on the current OS,
and you verified WMI is installed, do the following:
            open this script in Notepad
            search for Function IsOSSupported()
            change this line:
                        Case "5.0", "5.1", "5.2"
            to:
                        Case "5.0", "5.1", "5.2", "6.1"
            Save the script.

Exiting script now.


Operation Complete
Elapsed Time: 4.296875E-02 seconds.

Ending Script at 2013/12/11 9:54:57
以下は処理が正常終了した時のメッセージです
C:\TEMP>VBSCACLS "%CD%" /P users:F

C:\TEMP>cscript.exe C:\Windows\XCACLS.vbs "C:\TEMP" /E /P users:F
Microsoft (R) Windows Script Host Version 5.8
Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.

Starting XCACLS.VBS (Version: 5.2) Script at 2013/12/11 9:58:05

Startup directory:
"C:\TEMP"

Arguments Used:
        Filename = "C:\TEMP"
        /E (Edit ACL leaving other users intact)
        /P (Replace rights)
                users:F


 - Changing /P user/group: "users" to "BUILTIN\Users"

**************************************************************************
Directory: C:\TEMP
Replacing NTFS rights (F access for This Folder, Subfolders and Files) for "BUIL
TIN\Users"
Completed successfully.
**************************************************************************


Operation Complete
Elapsed Time: 4.941406 seconds.

Ending Script at 2013/12/11 9:58:10
関連する記事 ディレクトリの権限を変更する Xcacls.vbs と Xcacls.exe
posted by lightbox at 2013-12-11 10:10 | コマンド : コマンド | このブログの読者になる | 更新情報をチェックする

2013年11月17日


Windows7 : clip.exe ( Windows クリップボードにコマンドラインからのコマンドの出力をリダイレクトします )

単純なコマンドですが、とても有用です。昔は無かったので自分で作ったりしていましたが、Windows7 では普通にあります。ただ、Microsoft の文書を探すと、Windows サーバーのページへ行き着いてしまいます。説明は、clip /? で表示されるものと全く同じです。
C:\Users\lightbox>clip /?

CLIP

説明:
    コマンド ライン ツールの出力を Windows クリップボードにリダイレクトします。
    その出力されたテキストをほかのプログラムに貼り付けることができます。

パラメーター一覧:
    /?                  このヘルプを表示します。

例:
    DIR | CLIP          現在のディレクトリ一覧のコピーを Windows クリップボード
                        に貼り付けます。

    CLIP < README.TXT   readme.txt ファイルのテキストのコピーを Windows
                        クリップボードに貼り付けます。
一番有用で手近な利用方法は、レジストリに以下のように登録する事です。
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\shell\fcopy]
@="ファイル一覧をコピー"

[HKEY_CLASSES_ROOT\Directory\shell\fcopy\command]
@="cmd.exe /c pushd \"%V\" & dir /a-d /b | sort | clip"

こうすると、ディレクトリを右クリックして現れる『ファイル一覧をコピー』を選択すると、そのディレクトリ内の全てのファイルのみ( フォルダは排除しています )を、ファイル名のみでソートしてクリップボードにコピーします。

cmd.exe /c pushd "%V" & dir /a-d /b | sort | clip






関連する記事

全てのファイル・ディレクトリを表示する dir /a

Microsoft のドキュメント

クリップ( Windows サーバー )


posted by lightbox at 2013-11-17 01:06 | コマンド : コマンド | このブログの読者になる | 更新情報をチェックする

2012年12月11日


7zip のコマンドラインバージョン(7za.exe/920)の -r オプションはワイルドカードを指定した時だけのようです。

▼ 7zip のコマンドラインバージョンのダウンロード
http://sevenzip.sourceforge.jp/download.html

付属の HELP には、-r -r- -r0 と3つのオプションの説明があるのですが、テストしてみたところ -r と -r0 の動作が同じようなのです。デフォルトの動きは -r- だそうなのですが、ワイルドカードを指定しない以下のような記述では全てのディレクトリが対象になっています。

7za.exe a -tzip c:\user\temp\archive.zip f:\webhost\admin\

これは、-r でも -r- でも -r0 でも同じです。
しかし、以下のように書く事でサブディレクトリは対象外となります

7za.exe a -tzip c:\user\temp\archive.zip f:\webhost\admin\*.*

つまり、ワイルドカード指定した時のみ -r と -r- の差が出ています。ちなみに、以下の書き方はそもそもワイルドカードの書き方の間違いのようです。

7za.exe a -tzip c:\user\temp\archive.zip f:\webhost\admin\*

上記の記述でも動作しますが、* はワイルドカードとみなされていません。

【結論】

1) 全てのフォルダを一括圧縮では、フォルダを指定するだけでいい
2) ワイルドカードを使う場合は、-r が必須である
3) そのフォルダのみの検索ならば、-r は付けないでワイルドカードを指定する

です。



posted by lightbox at 2012-12-11 16:50 | コマンド : コマンド | このブログの読者になる | 更新情報をチェックする

2009年09月12日


コマンドプロンプト : WAV を mp3 に変換する

ダウンロード

中の lame.exe を使用した以下のようなバッチファイルを作成し、WAV ファイルがあるフォルダに置いて、実行します。
@echo off

for %%i in ( *.wav ) do (
	lame -h "%%~ni.wav" "%%~ni.mp3"
)



-h は高品質になると説明があります。
あっても、無くても bit rate は、128kbps です(サイズは変わりません)

WMP11 で 作成した mp3 とサイズは数バイト違うだけでした。

関連する記事

Windows Media Player(WMP11) を使った音楽CDの扱い( 総合的には lame.exe が必要でしょう )


タグ:変換 MP3
posted by lightbox at 2009-09-12 01:17 | コマンド : コマンド | このブログの読者になる | 更新情報をチェックする

2009年06月28日


ディレクトリごと新しいファイルのみをコピーする

XCOPY は、データのバックアップをバッチ処理で毎日行うのに便利です。サーバーであれば、スケジューラにバッチファイルを登録するのが一般的です。
xcopy.exe "コピー元ディレクトリ" "コピー先ディレクトリ" /D /E /C /S /Y    

/D
コピー元の日付がコピー先の日付より新しいファイルだけをコピーします。

/E
ディレクトリまたはサブディレクトリが空であってもコピーします。

/C
エラーが発生してもコピーを続けます。

/S
空の場合を除いて、ディレクトリとサブディレクトリをコピーします。

/Y
既存のファイルを上書きする前に確認のメッセージを表示しません。


※ 詳細は、xcopy /? で

posted by lightbox at 2009-06-28 23:17 | コマンド : コマンド | このブログの読者になる | 更新情報をチェックする

2009年04月26日


PHP : HTTP コピーコマンド( ダウンロード )

php -r copy('http://winofsql.jp/info.php','info.htm');




posted by lightbox at 2009-04-26 21:12 | コマンド : コマンド | このブログの読者になる | 更新情報をチェックする

2009年04月24日


コマンドプロンプトのカラム数変更

コマンドならば自動的に広がります。

コマンドプロンプトのカラム数は、プロパティからも変更できますが、その場合はドラッグして広げる必要があります(次回以降も最初はウインドウサイズが変更されません)。
mode con:cols=カラム数
表示モード:        MODE CON[:] [COLS=c] [LINES=n]
posted by lightbox at 2009-04-24 22:11 | コマンド : コマンド | このブログの読者になる | 更新情報をチェックする
Seesaa の各ページの表示について
Seesaa の 記事がたまに全く表示されない場合があります。その場合は、設定> 詳細設定> ブログ設定 で 最新の情報に更新の『実行ボタン』で記事やアーカイブが最新にビルドされます。

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

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

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

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


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

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

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

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

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


Windows
container 終わり

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

Android SDK ポケットリファレンス
改訂版 Webデザイナーのための jQuery入門
今すぐ使えるかんたん ホームページ HTML&CSS入門
CSS ドロップシャドウの参考デモ
Google Hosted Libraries
cdnjs
BUTTONS (CSS でボタン)
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり