2017年4月7日金曜日

任意の文字列を含む名前のファイルやフォルダのリストを取得する

コマンドラインを使いこなせる方なら「dir /B C:\folder\*abc*.* > c:\temp\1.txt」のように入力するだけで良いのですが、使いこなせる人ばかりでもないのでインターフェースを作成しました。


起動画面



最上段のエリアにフォルダをドラッグ&ドロップすると



フォルダの中身のリストが最下段のテキストエリアに表示されます。



ファイル名や拡張子を複数の条件(~を含む、~で始まる、~で終わる、~と一致する)で絞り込むこともできます。



フルパス表示も可能



以下ソース
<html>
<head>
<title>フォルダ内ファイルリスト取得</title>
<style type="text/css">
.max{width:100%;height:100%}
.w-max{width:100%}
.bc{border-collapse:collapse}
.nowrap{white-space:nowrap}
</style>
</head>
<body>
<table class=max>
<tr><td><iframe name=ifrName id=ifr class=max style="border:solid 1px #000;"></iframe></td></tr>
<tr height=1><td><button id=btn>cls</button></td></tr>
<tr height=1>
<td>
<table class="bc w-max" border=1>
<tr>
<td width=1><span class=nowrap>ファイル名</span></td>
<td><input id=inp0 class=w-max></td>
<td width=1><select id=sel0></select></td>
</tr>
<tr>
<td width=1><span class=nowrap>拡張子</span></td>
<td><input id=inp1 class=w-max></td>
<td width=1><select id=sel1></select></td>
</tr>
<tr>
<td width=1><span class=nowrap>種類</span></td>
<td colSpan=2><select id=sel種類 class=w-max></select></td>
</tr>
<tr>
<td width=1><span class=nowrap>表示</span></td>
<td colSpan=2><select id=sel表示 class=w-max></select></td>
</tr>
</table>
</td>
</tr>
<tr height=1><td><textarea id=ta wrap=off class=w-max style="height:70px"></textarea></td></tr>
</table>
</body>
<script>
resizeTo(400,350)
onload = function(){
btn.onclick()
var f=function(sel){
var ops=sel[OP], i=0
ops[i++] = new Option('を含む')
ops[i++] = new Option('で始まる')
ops[i++] = new Option('で終わる')
ops[i++] = new Option('と一致する')
}
f(sel0)
f(sel1)
var ops=sel種類[OP], i=0
ops[i++] = new Option('ファイル')
ops[i++] = new Option('フォルダ')
var ops=sel表示[OP], i=0
ops[i++] = new Option('名前のみ')
ops[i++] = new Option('フルパス')
}
pathIFR = ''
btn.onclick = function(){
var ifr_=document.getElementById('ifr'), sw初期化, swロック
ifr_.onreadystatechange=function(){
if(swロック || this.readyState!='complete'){return}
if(sw初期化){
var doc=ifr_.contentWindow.document
swロック = true
doc.open()
doc.write('ここにフォルダをドラッグ&ドロップしてください')
doc.close()
return sw初期化 = swロック = false
}
pathIFR = decodeURI((ifr.location+'').replace(/^file:/,'').replace(/^\/+(\w:)/,'$1'))
td更新()
ifr初期化()
}
var ifr初期化=function(){
sw初期化 = true
ifr.location = 'about:blank'
}
ifr初期化()
pathIFR = ''
inp0.value=inp1.value=''
ta.value = ''
}
sel0.onchange=sel1.onchange=sel種類.onchange=sel表示.onchange=inp0.onkeyup=inp1.onkeyup=td更新=function(){
ta.value = ''
if(!pathIFR){return alert('フォルダPathが取得できませんでした')}
pathIFR = pathIFR.replace(/\//g,'\\').replace(/\\$/,'')+'\\'
var f=function(sel, inp){
var str=inp.value
switch(sel[sI]){
case 0:return str ? ('*'+str+'*') : '*'
case 1:return str + '*'
case 2:return '*' + str
case 3:return str
}
}, name=f(sel0, inp0), ext=f(sel1, inp1), arr=getDir(pathIFR+name+'.'+ext, sel種類[sI]==0)
if(sel表示[sI]==1){ for(var i=0,L=arr.length;i<L;i++){ arr[i] = pathIFR+arr[i] } }
ta.value = arr.join('\n')
}
sI='selectedIndex', OP='options'
getDir = function(path, swFile){
path = path.indexOf(' ') ? ('"'+path+'"') : path
var obj=(new ActiveXObject('WScript.Shell')).exec('cmd /C dir /A'+(swFile?'-':'')+'D /B '+path), arr=obj.StdOut.ReadAll().split('\r\n')
arr.pop()
return arr
}
</script>
</html>
view raw getDir.hta hosted with ❤ by GitHub

0 件のコメント:

コメントを投稿