ファイルのみをリスト出力したい場面ってありませんか?
あのファイルどこに置いたっけな? ファイル名を整理しないとやばいな・・・など
そんな人向けに手っ取り早く、ドラッグ&ドロップするだけで簡単にCSVファイルを出力するWindowsバッチのスクリプトを作成してみました。
そんなソフトはいろいろあるかもしれませんが、簡単にリスト出力さえできればいい、という方はぜひコピって使ってみてください。
Windowsバッチツールの操作イメージ
一括で複数のフォルダやファイルをドラッグ&ドロップし、ファイルフルパス・ファイル名・更新日時・サイズなどのファイルのみ(フォルダは含まない)のリストをCSVファイル出力して、Excelで表示するイメージ映像です。
Windowsバッチツールの主な仕様
細かい処理はコメントで補足してるので、ザックリとした仕様を箇条書きで記載します。
- 複数のフォルダやファイルをドラッグ&ドロップして起動
- ダブルクリック不可チェック実施
- フォルダorファイルの属性チェックを実施
- ファイル情報として絶対パス、ファイル名、更新日時、サイズを取得
- batファイルを配置している場所にファイルのみリストをCSVファイル出力(カンマ区切り)
Windowsバッチツールのソースコード
下記のソースを全てコピー、1ファイルにまとめて保存してください。
Windwosバッチは簡単な処理であればいろいろ融通が効くと思うので、目的に合っていない場合は適当にカスタマイズしてみてください。
@echo off
rem #################################################################################################
rem (ファイル名)
rem file_list_out.bat
rem (処理概要)
rem フォルダやファイルをドラッグ&ドロップしたファイルのみの情報をCSV出力
rem (注意事項)
rem ・対象パス配下にあるファイル数があまりに多い場合は非常に時間がかかる。
rem ・ネットワーク上のフォルダやファイルを指定する場合はネットワークドライブに割り当てる必要がある。
rem #################################################################################################
rem ##############
rem 遅延環境変数
rem ##############
setlocal enabledelayedexpansion
rem ##########
rem 初期処理
rem ##########
rem -----引数-----
rem ドラッグ&ドロップ
set INPUT_PATH=%~1
rem -----引数チェック-----
rem クリック起動チェック(ドラッグ&ドロップのみOK、ダブルクリック起動はNG)
if "%INPUT_PATH%"=="" echo ドラッグ&ドロップしてください(複数可)& timeout 3& exit
rem -----設定-----
rem 自フォルダ
set DIR_HOME=%~dp0
rem 日付・時刻・秒
call :YYYYMMDDHHMMSS_GET
rem ファイル出力対象ファイル
set FILEOUT_TARGET_FILE=%DIR_HOME%!W_YYYYMMDDHHMMSS!_FILE_LIST.csv
rem ############
rem メイン処理
rem ############
rem -----タイトル出力-----
echo ファイルフルパス,ファイル名,更新日時,サイズ>> "!FILEOUT_TARGET_FILE!"
rem -----ドラッグ&ドロップした複数のフォルダやファイル分ループ-----
for %%F in (%*) do (
rem 対象パス取得
set TARGET_PATH=%%~F
rem 属性チェック
call :ATTRIBUTE_CHK "!TARGET_PATH!"
if "!W_FOLDER_FILE_KBN!"=="1" (
rem ファイルの場合
rem ファイル名抽出
call :PATH_UNDER_GET "!TARGET_PATH!"& set FILE_NM=!W_UNDER_NM!
rem リスト出力
call :FILE_TIMESTAMP_SIZE_GET "!TARGET_PATH!"
echo !TARGET_PATH!,!FILE_NM!,!W_FILE_TIMESTAMP!,!W_FILE_SIZE!>> "!FILEOUT_TARGET_FILE!"
) else (
rem フォルダの場合
rem 1フォルダ内のフォルダやファイル分ループ
for /F "DELIMS=" %%A in ('dir /b /s "!TARGET_PATH!"') do (
rem 絶対パス
set FULL_PATH=%%A
rem 属性チェック
call :ATTRIBUTE_CHK "!FULL_PATH!"
rem ファイルの場合のみ
if "!W_FOLDER_FILE_KBN!"=="1" (
rem ファイル名抽出
call :PATH_UNDER_GET "!FULL_PATH!"& set FILE_NM=!W_UNDER_NM!
rem リスト出力
call :FILE_TIMESTAMP_SIZE_GET "!FULL_PATH!"
echo !FULL_PATH!,!FILE_NM!,!W_FILE_TIMESTAMP!,!W_FILE_SIZE!>> "!FILEOUT_TARGET_FILE!"
)
)
)
)
echo.& echo ドラッグ&ドロップしたフォルダ配下のファイルリスト「!FILEOUT_TARGET_FILE!」を出力しました。
rem notepad !FILEOUT_TARGET_FILE!
exit /B
rem ###########################################################
rem (共通部品)日付・時間・秒をYYYYMMDDHHMMSS形式で取得
rem ・半角スペースを0に置換
rem 「 9:39:50.87」→「09:39:50.87」
rem ^
rem ・日付・時間を抽出
rem 0123456789 01234567890
rem 「2019/03/03」→「20190303」+「09:39:50.87」→「093950」
rem ^^^^ ^^ ^^ ^^ ^^ ^^
rem ###########################################################
:YYYYMMDDHHMMSS_GET
set W_TIME=!time: =0!
set W_YYYYMMDDHHMMSS=!Date:~0,4!!Date:~5,2!!Date:~8,2!!W_TIME:~0,2!!W_TIME:~3,2!!W_TIME:~6,2!
exit /B
rem ############################################
rem (共通部品)ファイルの更新日時とサイズ取得
rem ・ファイルの日付/時刻に展開
rem 例)2019/03/03 09:54
rem ・ファイルのサイズに展開
rem 例)1936
rem ############################################
:FILE_TIMESTAMP_SIZE_GET
set W_FILE_TIMESTAMP=%~t1
set W_FILE_SIZE=%~z1
exit /B
rem ####################################################
rem (共通部品)パス再下層取得
rem ・"\"を含むフルパスから、
rem 最下層のフォルダまたはファイルのみになるまで
rem 文字列編集して再帰的ループ(~\を削っていく)
rem 例)「C:\Windows\Temp」 →「Temp」取得
rem 「C:\Windows\Temp\temp.txt」→「temp.txt」取得
rem ####################################################
:PATH_UNDER_GET
set W_UNDER_NM=%~1
if "%W_UNDER_NM%"=="" exit /B
if "%W_UNDER_NM%"=="%W_UNDER_NM:*\=%" exit /B
set W_UNDER_NM="%W_UNDER_NM:*\=%"
call :PATH_UNDER_GET %W_UNDER_NM%
exit /B
rem ###############################################
rem (共通部品)属性チェック
rem ・フォルダかファイルかをチェック
rem ・ファイルファイル区分(0:フォルダ,1:ファイル)
rem ###############################################
:ATTRIBUTE_CHK
set W_ATTR=%~a1
if %W_ATTR:~0,1%==d (set W_FOLDER_FILE_KBN=0)
if %W_ATTR:~0,1%==- (set W_FOLDER_FILE_KBN=1)
exit /B
最後に
ファイルリスト出力の手段としては、Excelのvbaやフリーソフトなどでいくらでも見つかるとは思いますが、WIndowsバッチでもこんなことができるよ、というのをお伝えするために紹介させていただきました。
Windowsバッチをちょっと使いこなせば、例えば1時間かかっていた作業を1分でこなすことができるようになる可能性があります。
Windows環境であれば下準備不要で今すぐに始められるので、興味のある方はまずは少し触ってみてください。
コメント