ファイル名を小文字にリネームする。
dir /L でファイル名が小文字で表示されるので、これを利用します。
LRename ファイル...
@echo off
for %%1 in (%*) do for /f "delims=" %%2 in ('dir /b /l %%1') do ren %%1 "%%2"
« 2010年3月 | トップページ | 2010年5月 »
dir /L でファイル名が小文字で表示されるので、これを利用します。
LRename ファイル...
@echo off
for %%1 in (%*) do for /f "delims=" %%2 in ('dir /b /l %%1') do ren %%1 "%%2"
SETコマンドで置換します。
小文字に変換する。
LCase.cmd 文字列
@echo off
set env=%*
for %%i in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do call set env=%%env:%%i=%%i%%
echo %env%
大文字に変換する。
UCase.cmd 文字列
@echo off
set env=%*
for %%i in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) do call set env=%%env:%%i=%%i%%
echo %env%
ごみ箱(ドライブ別)サイズ.vbs
Set dic=CreateObject("Scripting.Dictionary")
Set fso=CreateObject("Scripting.FileSystemObject")
Set Shell=CreateObject("Shell.Application")
Set Folder=Shell.Namespace(10)
For Each FolderItem In Folder.Items()
drive=fso.GetDriveName(FolderItem.Path)
If Not dic.Exists(drive) Then dic.Add drive,Array(0,0)
Size=FolderItem.Size
If Size=0 Then
If fso.FolderExists(FolderItem.Path) Then
Size=fso.GetFolder(FolderItem.Path).Size
End If
End If
Item=dic.Item(drive)
Item(0)=Item(0)+1
Item(1)=Item(1)+Size
dic.Item(drive)=Item
Next
For Each drive In dic
Item=dic.Item(drive)
dic.Item(drive)=drive & " " & Item(0) & " 個の項目 "& FormatNumber(Item(1),0,,,True) & " バイト"
Next
MsgBox Join(dic.Items(),vbCrLf),,"ごみ箱(ドライブ別)"
あれ、普通には出てこないようですね。一応、ごみ箱フォルダで「すべて選択」すれば出てきますが。。。
ごみ箱サイズ.vbs
Set fso=CreateObject("Scripting.FileSystemObject")
Set Shell=CreateObject("Shell.Application")
Set Folder=Shell.Namespace(10)
For Each FolderItem In Folder.Items()
If FolderItem.Size Then
Size=Size+FolderItem.Size
Else
If fso.FolderExists(FolderItem.Path) Then
Size=Size+fso.GetFolder(FolderItem.Path).Size
End If
End If
Next
MsgBox Folder.Items().Count & " 個の項目 "& FormatNumber(Size,0,,,True) & " バイト",,"ごみ箱"
スクリプトからクリップボードを使うときは、IEを利用するのが普通ですが、clipboardDataを使う方法はインターネットゾーン(about:blank)のセキュリティレベルに依存します。
ExecWBを使う方法は、インターネットゾーンのセキュリティレベルに依存しませんが、innerTextにテキストを代入すると、
Set ie=CreateObject("InternetExplorer.Application")
ie.Navigate "about:blank"
Do While ie.Busy Or ie.ReadyState<>4
WScript.Sleep 100
Loop
ie.Document.body.innerText="a b"
ie.ExecWB 17,0
ie.ExecWB 12,0
ie.Quit
この方法はタブが空白に変換されます。そこで、textareaを使って、
Set ie=CreateObject("InternetExplorer.Application")
ie.Navigate "about:blank"
Do While ie.Busy Or ie.ReadyState<>4
WScript.Sleep 100
Loop
ie.Document.body.innerHTML="<textarea id=txt></textarea>"
ie.Document.all.txt.value="a b"
ie.ExecWB 17,0
ie.ExecWB 12,0
ie.Quit
とすれば、タブが保存されます。
スクリプトからクリップボードを使うときは、IEを利用するのが普通ですが、クリップボードからテキストを取り出すだけなら、
MsgBox GetObject("\","htmlfile").parentWindow.clipboardData.getData("text")
IEを使うより、軽くて簡単です。:-)
ただ、クリップボードにテキストを設定するのには使えません。:-(
ここで、もしCreateObject("htmlfile")を使うと、インターネットゾーンのセキュリティレベルに依存します。
GetObject("\","htmlfile")ならコンピュータゾーンのセキュリティレベルになります。
「お気に入りリンク」に「メモ帳」のショートカットを入れて、エクスプローラの「お気に入りリンク」から起動すると、「メモ帳」が二つ開きます。
なので、エクスプローラの「お気に入りリンク」は昔のエクスプローラの「リンクバー」代わりには使えません。
しかし、スクリプトで重複起動を抑止すれば、昔のエクスプローラの「リンクバー」代わりに使えるようになります。
先頭の4行を追加します。
GetCurrentShell.vbs
On Error Resume Next
Set Lock=CreateObject("Scripting.FileSystemObject").OpenTextFile(WScript.ScriptFullName & ":Zone.Identifier",8,True)
If Err Then WScript.Quit
On Error GoTo 0
Set wShell=CreateObject("WScript.Shell")
wShell.SendKeys "^{tab}"
For Each ie In CreateObject("Shell.Application").Windows()
If InStr(LCase(ie.FullName),"explorer.exe") Then
wShell.SendKeys "^{tab}"
If ie.StatusText="" Then Exit For
End If
Next
If IsEmpty(ie) Then
MsgBox "Not Found"
Else
MsgBox ie.LocationURL
End If
「お気に入りリンク」に入れて、エクスプローラの「お気に入りリンク」から起動します。
GetCurrentShell.vbs
Set wShell=CreateObject("WScript.Shell")
wShell.SendKeys "^{tab}"
For Each ie In CreateObject("Shell.Application").Windows()
If InStr(LCase(ie.FullName),"explorer.exe") Then
wShell.SendKeys "^{tab}"
If ie.StatusText="" Then Exit For
End If
Next
If IsEmpty(ie) Then
MsgBox "Not Found"
Else
MsgBox ie.LocationURL
End If
SendKeys "^{tab}^{tab}"でフォルダペインにフォーカスを移動します。
このとき、StatusTextは、""です。通常は、"~個の項目"、"~個の項目を選択"、"1 個選択"、などです。これを判定します。
「お気に入りリンク」に入れて、エクスプローラの「お気に入りリンク」から起動します。ただ、問題が。。。
WSHから現在または最後にアクティブなIEを捕捉します。
GetCurrentIE.vbs
Set wShell=CreateObject("WScript.Shell")
If wShell.AppActivate(" - Windows Internet Explorer") Then
wShell.SendKeys "^{f6}"
For Each ie In CreateObject("Shell.Application").Windows()
If ie.ReadyState=4 Then If TypeName(ie.Document)="HTMLDocument" Then If ie.Document.hasFocus() Then Exit For
Next
End If
If IsEmpty(ie) Then
MsgBox "Not Found"
Else
MsgBox ie.LocationURL
End If
AppActivate(" - Windows Internet Explorer")で、現在または最後にアクティブなIEをアクティブにし、SendKeys "^{f6}"で、HTMLDocumentのペインにフォーカスを移動します。これを判定します。
IEで「Web ページ、HTML のみ (*.htm;*.html)」で保存しようとしても、デフォルトが、IE7/IE8は「Web アーカイブ、単一のファイル (*.mht)」、IE6は「Web ページ、完全 (*.htm;*.html)」なので、これをいちいち変更しなければなりません。面倒臭。
IE7でShell.Windows().Item()が使えなくなったので、コンテキストメニュー拡張に変更しましたが、Vistaで「保護モード:有効」のページからのコンテキストメニュー拡張でActiveXObjectが使えなくなったため、再度、WSH起動に変更します。
IEの「お気に入りセンタ」か「お気に入りバー」から起動します。
Web ページ、HTML のみ.vbs
Set ies=CreateObject("Shell.Application").Windows()
For Each ie In ies
If ie.ReadyState=4 Then If TypeName(ie.Document)="HTMLDocument" Then If ie.Document.hasFocus() Then Exit For
Next
If IsEmpty(ie) Then
For Each ie In ies
If ie.ReadyState<>4 Then
ElseIf TypeName(ie.Document)="HTMLDocument" Then
ie.Document.focus
If ie.Document.hasFocus() Then Exit For
End If
Next
End If
If IsEmpty(ie) Then
MsgBox "Not Found"
WScript.Quit
End If
Set fso=CreateObject("Scripting.FileSystemObject")
title=ie.Document.title
If title="" Then
title=fso.GetFileName(ie.Document.location.pathname)
End If
Select Case fso.GetExtensionName(title)
Case "htm","html"
Case Else
title=title & ".htm"
End Select
title=Replace(title,"/","-")
title=Replace(title,":","")
title=Replace(title,"\","")
title=Replace(title,"*","")
title=Replace(title,"?","")
title=Replace(title,"<","")
title=Replace(title,">","")
title=Replace(title,"|","")
title=Replace(title,"""","")
title=Replace(fso.GetBaseName(title),".","_") & "." & fso.GetExtensionName(title)
ie.Document.execCommand "saveas",True,title
※ スクリプトファイル(またはそのショートカット)は他で作って、「お気に入り」か「お気に入りバー」に「移動」で入れること。
※ ウィンドウのフォアグラウンドロックを利用しているので、フォアグラウンドロックを無効(タイムアウト値を0)にしていると使えません。
IE7以降で「Web ページ、完全 (*.htm;*.html)」で保存しようとしても、デフォルトが「Web アーカイブ、単一のファイル (*.mht)」なので、これをいちいち変更しなければなりません。面倒臭。
IE7でShell.Windows().Item()が使えなくなったので、コンテキストメニュー拡張に変更しましたが、Vistaで「保護モード:有効」のページからのコンテキストメニュー拡張でActiveXObjectが使えなくなったため、再度、WSH起動に変更します。
IEの「お気に入りセンタ」か「お気に入りバー」から起動します。
Web ページ、完全.vbs
Set ies=CreateObject("Shell.Application").Windows()
For Each ie In ies
If ie.ReadyState=4 Then If TypeName(ie.Document)="HTMLDocument" Then If ie.Document.hasFocus() Then Exit For
Next
If IsEmpty(ie) Then
For Each ie In ies
If ie.ReadyState<>4 Then
ElseIf TypeName(ie.Document)="HTMLDocument" Then
ie.Document.focus
If ie.Document.hasFocus() Then Exit For
End If
Next
End If
If IsEmpty(ie) Then
MsgBox "Not Found"
WScript.Quit
End If
Set fso=CreateObject("Scripting.FileSystemObject")
title=ie.Document.title
If title="" Then
title=fso.GetFileName(ie.Document.location.pathname)
End If
Select Case fso.GetExtensionName(title)
Case "htm","html"
Case Else
title2=ie.Document.title
ie.Document.title=title & ".htm"
End Select
ie.ExecWB 4,1
If Not IsEmpty(title2) Then ie.Document.title=title2
※ スクリプトファイル(またはそのショートカット)は他で作って、「お気に入り」か「お気に入りバー」に「移動」で入れること。
※ ウィンドウのフォアグラウンドロックを利用しているので、フォアグラウンドロックを無効(タイムアウト値を0)にしていると使えません。
IE7で、CreateObject("Shell.Application").Windows().Item()でアクティブなIEが捕捉できなくなって、代わりに、MenuExtで、ShellWindowsの中からアクティブなIEを探すように変えたのに、Vista IEの「保護モード:有効」のページでは、MenuExtからShellWindowsが使えなくなりました。
「保護モード:無効」のページでは使えますが。。。
今度はどうすりゃいいんだ?ということで、また、WSHでCreateObject("Shell.Application").Windows()の中から、アクティブなIEを探すように変えます。
なんか、スクリプトの行く先々で妨害工作を受けているような。。。
タイトル末尾が
.
.h
.ht
.htm
.html
だと完全。
.m
.mh
.mht
だとアーカイブ。
.t
.tx
.txt
だとテキスト。
上記に該当しなければデフォルト、アーカイブ。
タイトルがないときはURLのpathname。
例えば、
dir /ah で隠し属性があるもの
dir /a-h で隠し属性がないもの
隠し属性があるもの、ないもの両方出すには?
dir /a
dirのデフォルトは/a-h-sだから無条件を明示しないと。
この前まで、
「整合性レベル:中」は、
shell:cache\Content.IE5
"C:\Users\%username%\AppData\Local\Microsoft\Windows\Temporary Internet Files\Content.IE5"
「整合性レベル:低」は、
shell:cache\Low\Content.IE5
"C:\Users\%username%\AppData\Local\Microsoft\Windows\Temporary Internet Files\Low\Content.IE5"
と思っていたら、この前から、
「整合性レベル:中」は、
"%temp%\Temporary Internet Files\Content.IE5"
"C:\Users\%username%\AppData\Local\Temp\Temporary Internet Files\Content.IE5"
に変わったみたい。IE7とIE8の違い?
explorer.exeを「整合性レベル:低」で起動すれば、ちゃんと見えます。
バッチファイルで、
LowCache.cmd
@echo off
copy %comspec% "%temp%\Low\lowcmd.exe"
"%temp%\Low\lowcmd.exe" /c start explorer.exe /separate,shell:cache
del "%temp%\Low\lowcmd.exe"
ショートカットでは、
LowCache.lnk
リンク先:
cmd.exe /c copy %comspec% "%temp%\Low\lowcmd.exe" & "%temp%\Low\lowcmd.exe" /c start explorer.exe /separate,shell:cache & del "%temp%\Low\lowcmd.exe"
COPYを使って、バッチファイルだけで、コマンドプロンプトを「整合性レベル:低」で実行します。
LowCMD.cmd
@echo off
copy %comspec% "%temp%\Low\lowcmd.exe"
"%temp%\Low\lowcmd.exe" /c cmd
del "%temp%\Low\lowcmd.exe"
ショートカットでも、
LowCMD.lnk
リンク先:
cmd.exe /c copy %comspec% "%temp%\Low\lowcmd.exe" & "%temp%\Low\lowcmd.exe" /c cmd & del "%temp%\Low\lowcmd.exe"
このとき、警告ダイアログは出ません。
IEを利用してバッチファイルで、コマンドを「整合性レベル:低」で実行します。
StartLow.cmd [コマンド]
@echo off
set cmdline=%*
(if defined cmdline (echo;%*) else echo cmd) >"%temp%\Low\low.cmd"
start iexplore "%temp%\Low\low.cmd"
コマンドを省略すると、コマンドプロンプト。
このとき、「ファイルのダウンロード - セキュリティの警告」ダイアログが出ます。
icaclsの出力は変。改行文字がLFのみ。
ファイル名 属性1
属性2
...
みたいに、1行目はファイル名と属性1が空白1つで続いているので、見分け難い。
属性2以降のインデントはファイル名の長さによって変化してばらばら。
これを、バッチファイルでwrapして、
ファイル名
属性1
属性2
...
のように整形します。
icaclst.cmd ファイルやフォルダ...(ワイルドカード使用可)
@echo off
setlocal enabledelayedexpansion
for %%1 in (%*) do (
echo %%~nx1
for /f "delims=" %%i in ('icacls.exe "%%~1"') do (
set x=%%i
set x=!x:%%~nx1=!
if "!x:~0,1!"==" " for /f "tokens=*" %%j in ("!x!") do echo; %%j
)
echo;
)
コンソールでicaclsを使う場合も表示が煩瑣なので、バッチファイルでwrapして整合性レベルだけを表示します。
IL.cmd ファイルやフォルダ...(ワイルドカード使用可)
@echo off
for %%1 in (%*) do (
set x=
for /f "delims=" %%i in ('icacls.exe "%%~1"') do (
for /f "tokens=1,3 delims=\: " %%j in ("%%i") do (
if "%%j"=="Mandatory" (
set x=%%k
call echo;%%x:~0,6%% %%~nx1
)
)
)
if not defined x echo; %%~nx1
)
いちいちコンソールでicacls使うのも面倒なので、VBScriptでwrapします。
IL.vbs ファイルやフォルダ...
set wshell=createobject("wscript.shell")
for each path in wscript.arguments
MsgBox path,,Array("IL Medium","IL Low","IL High")(wshell.run("cmd.exe /c for /f ""delims="" %i in ('icacls.exe """ & path & """') do for /f ""tokens=1,3 delims=\: "" %j in (""%i"") do if ""%j""==""Mandatory"" if %k==Low (exit 1) else if %k==High exit 2",0,true))
next
ファイルをやフォルダをドロップするか、SendToフォルダに置いて送ります。
explorer.exeを普通に起動すると、IEの「保護モード:無効」のキャッシュフォルダだけが見えます。
explorer.exeを「整合性レベル:低」で起動すると、IEの「保護モード:有効」のキャッシュフォルダだけが見れますが、それにはいろいろと準備が必要です。
IE8でインターネットゾーンを開いて、「ファイル」「開く」「参照」で「shell:cache」を見ると、IEの「保護モード:有効」のキャッシュフォルダだけが準備なしで見れます。※ IE9では使えない。
あるいは、以下のhtmファイルを開き、「参照」ボタンを押して、「shell:cache」を開きます。
low.htm
<!-- saved from url=(0014)about:internet -->
<input type=file>
もし、スクリプト有効 かつ 保護モード有効のセキュリティゾーンがあれば、そのサイトを開いて、アドレスバーに
javascript:"<input type=file>"
と入れても同じです。
ここで関連付けの操作を行うと「Internet Explorer セキュリティ」ダイアログが出ます。
再度印刷すると、同じ場所に存在するのに、エクスプローラなどで見ると見つからない。
結局、原因は、インターネットゾーンの「保護モード:有効」のWebページだったので、TIFファイルがVirtualizedフォルダに作成されてました。
デスクトップなら、
C:\Users\%username%\AppData\Local\Microsoft\Windows\Temporary Internet Files\Virtualized\C\Users\%username%\Desktop
Virtualizedフォルダへのショートカットを作っておくと便利かもです。
リンク先:
"C:\Users\%username%\AppData\Local\Microsoft\Windows\Temporary Internet Files\Virtualized\C\Users\%username%\Desktop"
Virtualizedフォルダを統合して見るには、IEでインターネットゾーンを開いて、「ファイル」「開く」「参照」で見るとよいでしょう。
ファイル名に*を入れるか、種類ですべてのファイルを選択します。
あるいは、以下のhtmファイルを開き、「参照」ボタンを押します。
low.htm
<!-- saved from url=(0014)about:internet -->
<input type=file>
Virtualizedフォルダのパスは以下のように短縮できます。
shell:cache\Virtualized\「元のパスからドライブの:を抜く」
参照先 「保護モードの Internet Explorer の理解と機能」
http://msdn.microsoft.com/ja-jp/library/bb250462(v=vs.85).aspx
IEからMicrosoft XPS Document Writerに印刷出力したXPSファイルがXPS Viewerで表示できない。
i 使用していたアプリケーションでエラーが発生しました
次の操作を試してください。
アプリケーションを再起動してください。
下の [詳細情報] リンクをクリックして、このエラーの詳細を表示します。
原因が分からず、Microsoft XPS Essentials Packをダウンロードしてインストールしました。
XPS Viewer EPからは表示できます。
結局、原因は、「保護モード:有効」のWebページだったので、XPSファイルが「整合性レベル:低」になったからのようです。これを開くとインターネットゾーンになります。ここでインターネットゾーンのセキュリティレベルが高だとエラーになります。
なので、icaclsでXPSファイルの整合性レベルを変えてもいいですが、面倒なのでコピーして、元ファイルを削除するとよいでしょう。
※ 普通はインターネットゾーンのセキュリティレベルがデフォルトの中高なので問題にならないのでしょう。
Web ページの保存
! この Web ページは、正しく保存されない可能性があります。保存する場合、ファイルに目的の情報が含まれていることを確認してください。
ページを保存しますか?
Webページによりけりと思いますが、以下の方法で保存できることがあります。
そのまま「HTMLのみ」で保存して、それを開き、もし同じように表示されたら、それを「完全」や「アーカイブ」で保存する。
※
もし、「HTMLのみ」のように表示されたら、<base href="そのURL">を<head></head>の中に追加してみます。
それを開いて、もし同じように表示されたら、それを「完全」や「アーカイブ」で保存します。
ToolBar.hta
<html>
<head>
<hta:application showintaskbar=no caption=no scroll=no contextmenu=no innerborder=no />
<script language="VBScript">
moveto 0,0
resizeto 34,54
sub toolbar(title,path)
set w=showmodelessdialog("about:<" & "object id=NSC classid=clsid:55136805-B2DE-11D1-B9F2-00A0C98BC547 width=""100%"" height=""100%""><" & "/object><" & "script language=vbscript>sub NSC_doubleclick:NSC.SelectedItem.InvokeVerb Empty:end sub<" & "/script>",,"dialogtop:0;dialogleft:0;dialogwidth:250px;dialogheight:" & (screen.availheight-35) & "px;resizable:yes;")
w.NSC.SetRoot path
w.document.title=title
end sub
</script>
</head>
<body style="margin:0;">
<button title="終了" onclick="close" style="background-color:lightgrey;">×</button>
<button title="Quick Launch" onclick='toolbar Me.title,"shell:quick launch"' style="background-color:lightgrey;">>></button>
</body>
</html>
ダブルクリックで関連付けのデフォルト動詞で起動します。
フォルダとタイトルを適宜変更します。
ボタンを追加するときは、resizeToも合わせて変更して。