目次
Windowsフォルダのファイル名一覧
Windowsでファイル名だけの一覧表を作る手順です。
という流れになります。
関数+手作業でやります。
ファイルの一覧を取得
指定フォルダ以下のフルパスのファイル名一覧をテキストデータで取得します。
例として「Neural Network Console 1.4.0」のサンプルプロジェクトの一覧表を作ってみます。
パスは「C:\neural_network_console_140\samples\sample_project」としときます。
コマンドプロンプト(Windowsシステムツールの下とかにあります)を立ち上げて以下のコマンドを打ちます。
cd C:\neural_network_console_140\samples\sample_project
もちろん、実際は「C:\neural_network_console_140\samples\sample_project」の部分は、その環境のパスですけどね。
そうすると、そのフォルダが「カレント」になります。
そこで、以下のコマンドを実行します。
dir /s /b /a-d > tmp.txt
こうすると、「C:\neural_network_console_140\samples\sample_project」以下のすべてのファイルとフォルダが、tmp.txtにフルパスで出力されます。
フルパスの文字列から「ファイル名」だけ抜き出す
上記テキストファイルをEXCELに貼り付け、関数使ってファイル名だけとりだします。口で言うと簡単ですが、フォルダの階層の深さもフォルダ名の長さもばらばらのデータなので、ちょっと、小ネタ的な技が必要になります。
まず、EXCELを開いて、上記テキストファイルをA列に貼り付けてやります。
ここでB1セルに以下の計算式を貼り付けてやります。
=MID(A1,FIND("@",SUBSTITUTE(A1,"\","@",LEN(A1)-LEN(SUBSTITUTE(A1,"\",""))),1)+1,999)
これが「A1セルのフルパスの文字列からファイル名だけを抜き出す」計算式・・今回の小ネタ・・です。
後は、B1セルをパーッとコピーしてやればファイル名だけの一覧がB列にできるので、フィルターで「sdcproj」だけを抜き取って、どっかにコピーしたら、サンプルプロジェクトの一覧ができる・・というわけです。
ファイル名を抜き出すEXCEL関数の解説
さきほどの計算式を解説します。
=MID(A1,FIND("@",SUBSTITUTE(A1,"\","@",LEN(A1)-LEN(SUBSTITUTE(A1,"\",""))),1)+1,999)
パスの区切り文字は「\」です。
だから、A1セルからファイル名だけを抜き出すには、「最後の\が出現する位置の次の文字から最後まで」を表示してやればよいことになります。
そういう動きをするのはMID関数ですから、MID(A1、「最後の\が出現する位置の次」,999)と書いているわけです。
位置の次は「+1」でいいわけですから、難しいのは「最後の\が出現する位置」です。
上記の関数では、これを以下の2段階でやってます。
① SUBSTITUTE関数で、A1セルのパスの最後の「\」だけを「@」に置き換える。
② FIND関数でA1セルのパスの中の「@」の位置を求める
つまり。
トリッキーなのは①の最後の「\」だけを「@」に置き換える部分です。
SUBSTITUTE関数は以下のような引数を持ってます。
SUBSTITUTE(文字列, 検索文字列,置換文字列, 置換対象)
この最後の「置換対象」が面白くて、ここに「3」とか指定すると、置き換え対象が3つあった時に「3つ目だけを置き換える」ということができます。
これを使うと。
「¥」がその文字列に何個出現するかを数えて、その数字を置換対象にすれば「最後に出現する¥だけを@に置き換える」という芸当ができてしまいます。
それがわかれば、「LEN(A1)-LEN(SUBSTITUTE(A1,"\","")」の意味がわかります。
LEN(A1)のA1セル全体の文字数から、\をすべて”””・・つまり空文字に置き換えた文字数「LEN(SUBSTITUTE(A1,"\","")」を引けば、「\」が何個出現するのかがわかる。
まあ、そういう理屈です。
応用編:ファイル名以外」を抜き出す関数に変更するには
応用として、計算式をこんな感じに変更します。
=LEFT(A1,FIND("@",SUBSTITUTE(A1,"\","@",LEN(A1)-LEN(SUBSTITUTE(A1,"\",""))),1))
すると。
同じような理屈で「ファイル名以外」を抜き出すことができます。
これをC列にコピーしていくと、A列のパスをB列の「ファイル名」とC列の「パスのみ」に分解できたりします。
ちょっと便利ですよ。
ではでは。