【UWSC】フォルダ内のファイル名を一括リネーム(一部削除)

任意のフォルダ内のファイルを一度にリネームするときの覚書。

リネーム前のファイル名
-------------------------------
abc_001.jpg
abc_002.jpg
abc_003.jpg
-------------------------------

リネーム後のファイル名
-------------------------------
001.jpg
002.jpg
003.jpg
-------------------------------

ようは_(アンダーバー)を含むそれより前の文字列を削除したい。
コマンドプロンプトだと、ファイルの先頭に文字列を付け足したり、拡張子の変更などは簡単に rename コマンドで出来る。けど、先頭の文字を一括削除は、少しスクリプトが複雑になるので、今回はパワーシェルを用いる。

//カレントディレクトリにあるファイルをリネームする場合
-------------------------------
ps = "Get-ChildItem * | Rename-Item -NewName { $_.Name -replace <#DBL>abc_<#DBL>, <#DBL><#DBL> }"

POWERSHELL(ps)
-------------------------------
やっていることは、まず Get-ChildItem でファイルを取得して、その結果を|(パイプ)で一つずつ Rename-Item に送っている。"$_.Name" はパイプで送られてきたファイル名を表す。"-replace" でファイル名の一部を置換。今回の例では「abc_」を空文字に置き換えている。

//ディレクトリのパスを指定してリネーム(CドライブのUsersディレクトリを指定)
-------------------------------
ps = "Get-ChildItem C:¥Users¥* | Rename-Item -NewName { $_.Name -replace <#DBL>abc_<#DBL>, <#DBL><#DBL> }"

POWERSHELL(ps)
-------------------------------

//コマンドプロンプトでやるとバッチファイルを作る必要がある
-------------------------------
for %%f in ( * ) do call :sub "%%f"
exit /b

:sub
set fname=%1
set fname=%fname:abc_=%
ren %1 %fname%
goto :EOF
-------------------------------
=の右側が置換後の文字列。

コマンドプロンプトの文字列置換の構文
-------------------------------
%[元の文字列]:[置き換え前の文字列]=[置き換え後の文字列]%
-------------------------------

なお、Get-ChildItem と Rename-Item はコマンドプロンプトでいえば dir と ren なので、それぞれ dir と ren がエイリアスとして使える。

もう少し細かな指定も出来る↓

//リネームする対象を.jpgファイルだけにすると
-------------------------------
ps = "Get-ChildItem *.jpg | Rename-Item -NewName { $_.Name -replace <#DBL>abc_<#DBL>, <#DBL><#DBL> }"

POWERSHELL(ps)
-------------------------------

//ファイル名が xyz から始まるファイルに対して xyz を789 に置換して、さらに拡張子を.jpg から .txt にする場合。
-------------------------------
Get-ChildItem xyz* | Rename-Item -NewName { ($_.Name -replace "xyz", "789") -replace "jpg", "txt" }
-------------------------------

windows7でコマンドラインからjheadコマンドを使う方法

jheadはExif(エグジフ)ファイルの情報を編集・削除するためのプログラム。

コマンドラインから使うための覚書。

1.jheadのプログラム(jhead.exe)をダウンロードする。

ダウンロード元
--------------------------------------------------

http://www.sentex.net/~mwandel/jhead/

--------------------------------------------------

このときアバストというウイルス対策ソフトを使っていてダウンロードの誤検出された。スキャンから除外する設定をして対処。

2.PATH を通す。

ダウンロードしたファイルは適当なところに置いて、そこにパスを通す。

C:\Program Files (x86) に jhead というフォルダを作ってその中にプログラムを置いたら

jhead.exe の置き場
--------------------------------------------------
C:\Program Files (x86)\jheadフォルダ
--------------------------------------------------

コマンドラインからパスを通す
--------------------------------------------------
C:\Users\○○>path C:\Program Files (x86)\jheadフォルダ
--------------------------------------------------

これで使えるようになる。

なお PATH コマンドでパスを通すやり方はコマンドプロンプトを閉じると無効になるので、頻繁に使うなら windows の環境変数に jhead のパスを追加しておくといい。

3.コマンドの一例

Exif情報を削除
--------------------------------------------------
jhead -purejpg C:¥Users¥目的のファイル.jpg
--------------------------------------------------

Exif情報を削除(すべてのjpgファイル)
--------------------------------------------------
jhead -purejpg C:¥Users¥*.jpg
--------------------------------------------------

Usersディレクトリのサブディレクトリを対象にする
--------------------------------------------------
jhead -purejpg C:¥Users¥*¥*.jpg
--------------------------------------------------

ヘルプを見る
--------------------------------------------------
jhead -h
--------------------------------------------------

ヘルプを見る(パスが通ってない場合)
--------------------------------------------------
C:\Program Files (x86)\jheadフォルダ\jhead -h
--------------------------------------------------

UWSCで「Exif情報を削除」を実行(パスを通してない場合)
--------------------------------------------------
CMDSTR = "<#DBL>C:\Program Files (x86)\jheadフォルダ\jhead<#DBL> -purejpg <#DBL>C:¥Users¥目的のファイル.jpg<#DBL>"

DOSCMD(CMDSTR,FALSE,TRUE)
--------------------------------------------------
<#DBL>がいるのはパスの途中に半角スペースがある場合のみ

UWSCでファイルの移動

UWSCで指定した場所にファイルを移動するサンプルスクリプト

指定したひとつのファイルを移動する場合
------------------------------------------------------
FROM_URL = "C:¥移動ファイル.txt" //移動させたいファイル

TO_URL = "C:¥Users¥移動先フォルダ" //移動先のフォルダ

CMDSTR = "move " + FROM_URL + " " + TO_URL

DOSCMD(CMDSTR,FALSE,TRUE) //実行
------------------------------------------------------

拡張子が同じファイルをすべて移動する場合
------------------------------------------------------
FROM_URL = "C:¥*.txt" //移動させたいファイル

TO_URL = "C:¥Users¥移動先フォルダ" //移動先のフォルダ

CMDSTR = "move " + FROM_URL + " " + TO_URL

DOSCMD(CMDSTR,FALSE,TRUE) //実行
------------------------------------------------------

UWSCで指定した場所にフォルダを作る

UWSCで指定した場所にフォルダを作るときのサンプルスクリプト

-----------------------------------------------------------
folder_name ="新しいフォルダ" //作りたいフォルダの名前

//作りたい場所を指定
Doscmd("mkdir C:¥" + folder)
-----------------------------------------------------------

//フォルダ名に半角スペースが含まれる場合は<#DBL>で囲む
-----------------------------------------------------------
folder_name ="新しいフォルダ" //作りたいフォルダの名前

//作りたい場所を指定
Doscmd("mkdir C:¥<#DBL>" + folder + "<#DBL>")
-----------------------------------------------------------

windows7でのOLE/COM Object viewのインストール方法

OLE/COM Object viewは、システムに現在インストールされている全てのオブジェクトを調べることができるツール。

2015/03現在ダウンロード場所
-----------------------------------------------------------------

http://jp.downv.com/install-OLE-COM%83I%83u%83W%83F%83N%83g%83r%83%85%81%5B%83A-10555289.htm

http://download.cnet.com/Windows-2000-Resource-Kit-Tool-OLE-COM-Object-Viewer-oleview-exe/3000-10250_4-10732958.html

-----------------------------------------------------------------

自分のwindowsでは C:\Program Files (x86)\Resource Kit にインストールされた。

oleview.exeを実行すると、システムによっては「iviewers.dllというファイルがない」というメッセージが出る。

dllのダウンロード場所
-----------------------------------------------------------------

http://download.microsoft.com/download/2/f/1/2f15a59b-6cd7-467b-8ff2-f162c3932235/ovi386.exe

古いバージョンのoleview.exeから取得することができる。デフォルトではファイルはC:\MSTOOLS\BINディレクトリにインストールされる。

https://www.microsoft.com/en-us/download/details.aspx?id=8279

Windows SDKをインストールしてもOK。

https://msdn.microsoft.com/ja-jp/windows/desktop/bg162891.aspx

Widnows8.1用だが7もOK。
-----------------------------------------------------------------

必要なのはiviewer.dllだけ。oleview.exeと同じディレクトリにコピーした後、下記のコマンドラインを実行して、dllを登録する。(コマンドラインを管理者権限で開くには、Ctrl + Shiftを押しながら起動)

--------------------------------------------------------
Regsvr32 "(iviewers.dllのパス)"
例:例: Regsvr32 "C:\Program Files (x86)\Resource Kit\iviewers.dll"
--------------------------------------------------------

参考サイト

http://open-shelf.appspot.com/AutoIt3.3.6.1j/html/intro/ComRef.htm

http://qiita.com/zakuroishikuro/items/d9530f6feb5467fc318b

【uwsc】windows media playerで動画ファイルを再生

uwscを使って、windows media playerで動画ファイルを再生するスクリプト。

windows media playerで動画ファイル(wmv)を再生
-----------------------------------------------------
exec("C:¥Program Files (x86)¥Windows Media Player¥wmplayer.exe ¥play C:¥目的のファイル.wmv")
-----------------------------------------------------
¥
オプションの解説

http://support.microsoft.com/kb/241422/ja

ファイル名に半角スペースを含む場合は<#DBL>で囲む。
-----------------------------------------------------
exec("C:¥Program Files (x86)¥Windows Media Player¥wmplayer.exe /play <#DBL>C:¥半角 スペース.wmv<#DBL>")
-----------------------------------------------------

ただ media player を起動するだけならこちらでもOK
-----------------------------------------------------
doscmd("C:¥Program Files (x86)¥Windows Media Player¥wmplayer.exe")
-----------------------------------------------------

動画ファイルを直接しているするならこちら。この場合動画ファイルが関連付けされている動画プレイヤーが起動。
-----------------------------------------------------
doscmd("C:/Users/目的のファイル.wmv")
-----------------------------------------------------

【UWSC】動画ファイルの再生時間を取得

wmvファイルなどの動画ファイルから再生時間を取得するUWSCスクリプト。
動画ファイルのプロパティの詳細タグから見える動画の長さを参照する。

UWSCスクリプト
--------------------------------------------------
//エクスプローラの詳細情報を得る
dim o_Shell = CreateOleObj("Shell.Application")
dim s_dir   = get_cur_dir

//このファイルと同じフォルダにあるものとする
dim s_fileName = "目的のファイル.wmv"

//NameSpace(名前空間)でフォルダオブジェクトを作る
dim o_folder = o_Shell.NameSpace(s_dir)

//ParseNameで指定されたアイテムの FolderItem オブジェクトを作成し返す。
//FolderItem とは、フォルダに含まれる個々のファイルやフォルダのこと。
dim o_item  = o_folder.ParseName(s_fileName)

dim i = 27 //長さを参照するための番号 XPなら21

//GetDetailsOfメソッドでフォルダ内のアイテムについて詳細を取得。
dim s_columName = o_folder.GetDetailsOf(emptyparam, i)
dim s_value   = o_folder.GetDetailsOf(o_item, i)
s = i +" : "+ s_columName +" = "+ s_value
print s

sleep(50) //表示時間
--------------------------------------------------

もっと他の詳細情報を得たい場合

--------------------------------------------------
//エクスプローラの詳細情報を得る
dim o_Shell = CreateOleObj("Shell.Application")
dim s_dir   = get_cur_dir

//このファイルと同じフォルダにあるものとする
dim s_fileName = "目的のファイル.wmv"

//NameSpace(名前空間)でフォルダオブジェクトを作る
dim o_folder = o_Shell.NameSpace(s_dir)

//ParseNameで指定されたアイテムの FolderItem オブジェクトを作成し返す。
//FolderItem とは、フォルダに含まれる個々のファイルやフォルダのこと。
dim o_item  = o_folder.ParseName(s_fileName)

dim i
for i=-1 to 50
  //GetDetailsOfメソッドでフォルダ内のアイテムについて詳細を取得。
  dim s_columName = o_folder.GetDetailsOf(emptyparam, i)
  dim s_value   = o_folder.GetDetailsOf(o_item, i)
  s = i +" : "+ s_columName +" = "+ s_value
  print s
next

sleep(50) //表示時間
--------------------------------------------------

【vbs】windows7でmp3ファイルの再生時間を取得

windows7でmp3ファイルの再生時間を取得するためのメモ

//このスクリプトをvbsファイルとして保存
--------------------------------------------------------------
'Explicit(エクスプリシット)はっきりと述べられた、明白な、の意。
'変数の宣言を強制する
Option Explicit

Dim itm

With CreateObject("Shell.Application").Namespace("C:\Users\Public\Music\Sample Music")
For Each itm In .Items

'InStr は文字列の中に指定の言葉があるか
'LCase は小文字に変換
If InStr(LCase(itm.Type), "mp3") Then
WScript.Echo itm.Name & " , 長さ:" & .GetDetailsOf(itm, 27)
'XPの場合は21
End If
Next
End With
--------------------------------------------------------------

ちなみに他の主な項目は次のとおり。

-----------------------------------------------------------------------------
WScript.Echo itm.Name & " , ファイルサイズ:" & .GetDetailsOf(itm, 1)
WScript.Echo itm.Name & " , ファイルの種類:" & .GetDetailsOf(itm, 2)
WScript.Echo itm.Name & " , 更新日時:" & .GetDetailsOf(itm, 3)
WScript.Echo itm.Name & " , 作成日時:" & .GetDetailsOf(itm, 4)
WScript.Echo itm.Name & " , アクセス日時:" & .GetDetailsOf(itm, 5)
WScript.Echo itm.Name & " , 属性:" & .GetDetailsOf(itm, 6)
WScript.Echo itm.Name & " , 所有者:" & .GetDetailsOf(itm, 10)
WScript.Echo itm.Name & " , 参加アーティスト:" & .GetDetailsOf(itm, 13)
WScript.Echo itm.Name & " , アルバム:" & .GetDetailsOf(itm, 14)
WScript.Echo itm.Name & " , 年:" & .GetDetailsOf(itm, 15)
WScript.Echo itm.Name & " , ジャンル:" & .GetDetailsOf(itm, 16)
WScript.Echo itm.Name & " , 指揮者:" & .GetDetailsOf(itm, 17)
WScript.Echo itm.Name & " , 評価:" & .GetDetailsOf(itm, 19)
WScript.Echo itm.Name & " , 参加アーティスト:" & .GetDetailsOf(itm, 20)
WScript.Echo itm.Name & " , タイトル:" & .GetDetailsOf(itm, 21)
WScript.Echo itm.Name & " , コメント:" & .GetDetailsOf(itm, 24)
WScript.Echo itm.Name & " , トラック番号:" & .GetDetailsOf(itm, 26)
WScript.Echo itm.Name & " , 長さ:" & .GetDetailsOf(itm, 27)
WScript.Echo itm.Name & " , ビット レート:" & .GetDetailsOf(itm, 28)
WScript.Echo itm.Name & " , コンピューター:" & .GetDetailsOf(itm, 53)
WScript.Echo itm.Name & " , 名前:" & .GetDetailsOf(itm, 155)
WScript.Echo itm.Name & " , フォルダーのパス:" & .GetDetailsOf(itm, 177)
WScript.Echo itm.Name & " , 項目の種類:" & .GetDetailsOf(itm, 182)
WScript.Echo itm.Name & " , エンコード方式:" & .GetDetailsOf(itm, 193)
WScript.Echo itm.Name & " , 発行元:" & .GetDetailsOf(itm, 195)
WScript.Echo itm.Name & " , サブタイトル:" & .GetDetailsOf(itm, 196)
WScript.Echo itm.Name & " , アルバムのアーティスト:" & .GetDetailsOf(itm, 217)
WScript.Echo itm.Name & " , ビート数/分:" & .GetDetailsOf(itm, 219)
WScript.Echo itm.Name & " , 作曲者:" & .GetDetailsOf(itm, 220)
WScript.Echo itm.Name & " , イニシャル キー:" & .GetDetailsOf(itm, 221)
WScript.Echo itm.Name & " , コンパイルの一部:" & .GetDetailsOf(itm, 222)
WScript.Echo itm.Name & " , 雰囲気:" & .GetDetailsOf(itm, 223)
WScript.Echo itm.Name & " , セットのパート:" & .GetDetailsOf(itm, 224)
WScript.Echo itm.Name & " , サブタイトル:" & .GetDetailsOf(itm, 254)
WScript.Echo itm.Name & " , 共有ユーザー:" & .GetDetailsOf(itm, 268)
-----------------------------------------------------------------------------

DreamHostでmysqlの文字化け対策

DreamHost にてデータベースの情報を mysql で取り出すと日本語が????と文字化けする。

文字化け対策としてデータベース接続時に文字コードを指定する。

----------------------------------------------------
$link = mysql_connect($hostname,$username,$password);

mysql_select_db($database) or die("Unable to select database");

mysql_query('SET NAMES utf8', $link); ←これを追記
//mysql_set_charset('utf8'); ←もしくはこれ
----------------------------------------------------

SET NAMES には脆弱性あるので mysql_set_charset を使うのがいいよう。

もしくは my.conf で文字コードを指定する。

【PHP】DreamHostでmysqlの接続

DreamHostでPHPを使ってmysqlデータベースへ接続する方法のメモ。

//mysqlの接続
///////////////////////////////////////////////
$hostname = ""; // mysql.example.com (「mysql.」 + 「独自ドメイン」)
$username = ""; // データベースを設定したときに決めたユーザ名
$password = ""; // データベースを設定したときに決めたパスワード
$database = ""; // 接続するデータベース名

$link = mysql_connect($hostname,$username,$password);
mysql_select_db($database) or die("Unable to select database");
mysql_query('SET NAMES utf8', $link); //←文字化け対策
//mysql_set_charset('utf8'); //←もしくはこれ
///////////////////////////////////////////////

//出力の例
///////////////////////////////////////////////
$sql = "SELECT * FROM table_name";

$result = mysql_query($sql,$link) or die("Unable to select: ".mysql_error());

while($datas = mysql_fetch_assoc($result)) {

echo $datas['column_name'] . "
";

}
///////////////////////////////////////////////

//mysqlの切断
///////////////////////////////////////////////
mysql_close($link);
///////////////////////////////////////////////