« 2020年2月 | トップページ | 2020年6月 »

2020年5月の記事

2020年5月 6日 (水)

エクスプローラからファイル一覧を出力するVBScript(検索結果もOK)

本記事では、Windowsのファイルエクスプローラで表示・選択されているファイルの一覧(ファイル名、パス、サイズ、更新日時)をクリップボードに張り付ける方法について記載している。
これは、エクスプローラで検索した結果に対しても有効である。

実は、これは、以前の記事「エクスプローラでファイル名をクリップボードにコピーする」で紹介した内容の改良版で、前回との違いなどを最初に記載しているが、手っ取り早く試したい人は、【導入手順】から読んでほしい。


【前回記事内容と今回の変更点】

前回は(今回も同じであるが)以下の方法で実現している。

step1.対象ファイルを選択した状態でエクスプローラの右クリックメニュー →「送る」で特定のバッチファイルを選択
step2.バッチファイルが実行され、ファイルの情報をクリップボードへコピー
step3.(人が)テキストファイルやExcelに貼り付け

また、出力する情報別に、以下の3種類のバッチファイルを用意していた。

  1. ファイル名のみのの一覧(テキスト形式)
  2. パス、ファイル名、更新日時、ファイルサイズ の一覧(Excelに張り付けられるようTAB区切り)
  3. tree情報(Dosコマンドの tree の実行結果)

自分でも日々の業務の中で使用しており、特に 2 は重宝して使っていた。
エクスプローラ内のファイルの一覧を表示するのであれば、Dosコマンドの Dir でも何とかなるが(それでも Excel に貼って2次加工したい場合はひと手間必要)、エクスプローラで検索した結果の一覧を更新日時やサイズと合わせて出力する場合はこれ以外の方法はないと思う。

ところが、これまで使っていて、うまく動作しないケースを発見した。ファイル名やフォルダ名に全角空白が含まれる場合で、なぜか、全角空白で名称が分断され、2つのファイルやフォルダが存在するように誤動作してしまう。

この原因調査のためググってみたところ、以下の記事を発見した。

ファイル名に=;,や全角空白を使うときは、半角空白も併せて使うべし。
ファイルエクスプローラからバッチファイルへドラッグ&ドロップして正しいファイル名を得る方法


結果的には、これはバッチファイルの仕様(バグ?)でどうしようもないようである。それも、ファイル名やフォルダ名に一緒に半角空白が入っていればOKという謎仕様である。

そこで、バッチファイルの使用は諦め、1と2を VBScript で書き直したのが今回の記事である。VBScript はどの Windowsにも実装されているので、利用にあたって特に設定を変更したり何かのモジュールを導入する必要はない。


【導入手順】

Step1.

以下のリンクを右クリックし、メニューから「名前を付けてリンク先を保存」や「対象をファイルに保存」などを選択して VBScript ファイルをダウンロードし、ファイル名の最後の「.txt」を削除して(拡張子をvbsにして)保管したいフォルダに保存する。
それぞれ、上記の 1, 2 に対応しているので、どちらか一方でも問題ない。
文字コードは SJISを使っているため ブラウザ上で表示した場合は文字化けするので注意。

「1_copy_filenames.vbs.txt」をダウンロード
「2_copy_file_info_for_Excel.vbs.txt」をダウンロード

 

なお、「2_copy_file_info_for_Excel.vbs.txt」については、テキストエディタでファイルの先頭で定義されている定数を変更することで、以下のカスタマイズが可能である。(デフォルトで問題なければそのままで良い。)

  • fol_level_q = 0

フォルダが選択されている場合、サブフォルダ以下を階層的に調査するかを指定する。
     0:調査しない
     1:調査する
    -1:毎回確認画面でどちらかを指定する

  • Const def_fol_level = 20
       
       調査する場合の階層レベルを指定する。
        -1:制限なし
         0:サブフォルダは調査しない
         n:N階層まで調査

        通常 -1 でも問題ないが、シンボリックリンクなどがある場合に無限ループに陥る可能性があるので初期値は20にしている
        
  • Const fol_output = 1

   フォルダ自身の情報を1行として出力するかを指定
     1:出力する
     0:出力しない(ファイルの情報のみを出力する)
      

Step2.

Step1.で保存したバッチファイルのショートカットを SendToフォルダの直下に作成し、お好みで名称を判りやすいものに変更する。

SendToフォルダは、右クリックメニューで「送る」を選択した時に表示されるファイルを格納する場所で、エクスプローラ上部のパスが表示されるところに「shell:sendto」と入力して開くことができる。
私の場合(OSはWindows10 Home)は以下のフォルダである。
C:\Users\ユーザ名\AppData\Roaming\Microsoft\Windows\SendTo

 
【利用方法と実行例】

エクスプローラ上で対象ファイルやフォルダを選択し(複数選択可)、右クリック → 送る から 実行するVBScriptを選択して実行する。
その後、「1_copy_filenames.vbs」であればテキストエディタなどへ、「2_copy_file_info_for_Excel.vbs」であれば Excelの空シートに貼り付ける。


以下が貼り付けイメージである。

  • サンプルのファイル構成(青背景の4つを選択した状態で右クリック)

  E:\PROGRAM FILES (X86)\MOZILLA FIREFOX
  ├─Accessible.tlb
  ├─AccessibleHandler.dll
  ├─AccessibleMarshal.dll
  └─uninstall
    ├─helper.exe
    ├─shortcuts_log.ini
    ├─uninstall.log
    └─uninstall.update 

  • 1_copy_filenames.vbs の実行結果
     
      E:\Program Files (x86)\Mozilla Firefox  <= 1行目はパス
      Accessible.tlb
      AccessibleHandler.dll
      AccessibleMarshal.dll
      uninstall
     
  • 2_copy_file_info_for_Excel.vbs の実行結果
    • fol_level_q = 1 (サブフォルダを調査)で実行した場合
    • fol_level_q = 0 の場合は、6行目以降は表示されない

  Excel_image_001

 

もう1つ、検索結果についての貼り付け例を示す。

  • エクスプローラでの検索結果
    • Firefox のインストールフォルダ内で "log"を検索し4ファイルがヒット

Excel_image_002

  • 2_copy_file_info_for_Excel.vbs の実行結果
    • 検索結果の4ファイルとも選択して実行

Excel_image_003

 

では。

| | コメント (0)

« 2020年2月 | トップページ | 2020年6月 »