2017年11月
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30    
無料ブログはココログ

« VBSファイルをCMDファイルにする。 | トップページ | ファイル名をエクスプローラと同じ順序にソートする。(その2) »

2007年12月11日 (火)

ファイル名をエクスプローラと同じ順序にソートする。

エクスプローラと同じ順序にソートするにはどうするか?
一般的には、Win32APIのStrCmpLogicalWを使えばよいようです。
しかし、スクリプトではどうするか?
エクスプローラと同じ順序にソートするんだったら、エクスプローラを使えばいいじゃん。
ということで、以下、CScript.exeで実行のこと。

FolderName="フルパス"
Set ie=GetObject("new:{C08AFD90-F2A1-11D1-8455-00A0C91F3880}")
ie.Navigate FolderName
Do While ie.Busy Or ie.ReadyState<>4
  WScript.Sleep 100
Loop
Set Folder=ie.Document.Folder
For Each FolderItem In Folder.Items()
  WScript.Echo FolderItem.Name
Next
ie.Quit

ただし、FolderItem.Nameは使わないほうがよいので、fso.GetFileName(FolderItem.Path)を使います。
※ FolderItem.Nameは、.lnkなど拡張子が表示されない。

また、フォルダを除いて、ファイルだけを取り出すには、FolderItem.IsFolderは使わないほうがよいので、FolderItem.Typeで絞り込みます。
※ FolderItem.IsFolderは、.zipなどがフォルダの扱い。

FolderName="フルパス"
Set fso=CreateObject("Scripting.FileSystemObject")
Set ie=GetObject("new:{C08AFD90-F2A1-11D1-8455-00A0C91F3880}")
ie.Navigate FolderName
Do While ie.Busy Or ie.ReadyState<>4
  WScript.Sleep 100
Loop
Set Folder=ie.Document.Folder
For Each FolderItem In Folder.Items()
  If FolderItem.Type<>"ファイル フォルダ" Then
    WScript.Echo fso.GetFileName(FolderItem.Path)
  End if
Next
ie.Quit

更に、拡張子などで絞り込むには、fso.GetExtensionName(FolderItem.Path)などで判定します。

FolderName="フルパス"
Set fso=CreateObject("Scripting.FileSystemObject")
Set ie=GetObject("new:{C08AFD90-F2A1-11D1-8455-00A0C91F3880}")
ie.Navigate FolderName
Do While ie.Busy Or ie.ReadyState<>4
  WScript.Sleep 100
Loop
Set Folder=ie.Document.Folder
For Each FolderItem In Folder.Items()
  If FolderItem.Type="ファイル フォルダ" Then
  ElseIf LCase(fso.GetExtensionName(FolderItem.Path))="txt" Then
    WScript.Echo fso.GetFileName(FolderItem.Path)
  End If
Next
ie.Quit

« VBSファイルをCMDファイルにする。 | トップページ | ファイル名をエクスプローラと同じ順序にソートする。(その2) »