【PR】 バッチファイル

フォルダ内のファイル情報をCSV出力するバッチファイル【図解】

2025-03-10

アイキャッチ画像

この記事では、フォルダ内のすべてのファイルの情報を取得して一覧にしてCSVファイルを出力するバッチファイルを紹介します。

サブフォルダ内のファイルの情報も取得するモードも備えています。

以下に概要を示します。

「フォルダ内のファイル情報をCSV出力するバッチファイル」の概要

取得できるファイル情報は、以下の通りです。

取得される情報

  • ファイル名
  • ファイルのフルパス
  • フォルダのフルパス
  • サイズ(バイト)
  • 作成日時
  • 最終更新日時
  • 最終アクセス日時
  • 属性

このバッチファイルは、この記事の後半に示すコードをメモ帳に貼り付けるだけで誰でも簡単に使えます。




バッチファイルの作成方法

このバッチファイルの作り方はシンプルです。

別の記事で紹介した「バッチファイルの作成方法」の手順3で、以下のコードをメモ帳に貼り付けるだけです。

バッチファイルの名前は何でもかまいません。

@echo off
setlocal enabledelayedexpansion

REM V01L02

echo ファイル情報収集ツール
echo ====================
echo.
echo 収集対象の選択:
echo 1. 現在のフォルダ内のファイル情報のみ
echo 2. 現在のフォルダとすべてのサブフォルダ内のファイル情報
echo.

:ask_scope
set /p SCOPE_CHOICE="選択してください (1 または 2): "

if "%SCOPE_CHOICE%"=="1" (
    set INCLUDE_SUBFOLDERS=N
) else if "%SCOPE_CHOICE%"=="2" (
    set INCLUDE_SUBFOLDERS=Y
) else (
    echo 入力が無効です。1 または 2 を入力してください。
    goto ask_scope
)

echo.

REM ファイル数をカウントするためのカウンタを初期化
set FILE_COUNT=0

REM カレントディレクトリのフォルダ名を取得
for %%I in (.) do set "FOLDER_NAME=%%~nxI"
set "CURRENT_DIR=%CD%"

REM 出力CSVファイル名の設定
set "BASE_CSV_NAME=%FOLDER_NAME%.csv"
set "CSV_NAME=%BASE_CSV_NAME%"

REM 同名ファイルが存在する場合、連番付与
set counter=1
:checkFile
if exist "%CSV_NAME%" (
    set "CSV_NAME=%FOLDER_NAME%_%counter%.csv"
    set /a counter+=1
    goto checkFile
)

REM 作成するCSVファイル名を保存(後で除外に使用)
set "CSV_FILE_FULLPATH=%CD%\%CSV_NAME%"
set "BATCH_FILE_FULLPATH=%~f0"

REM CSVヘッダーの作成
echo ファイル名,ファイルのフルパス,フォルダのフルパス,サイズ(バイト),作成日時,最終更新日時,最終アクセス日時,属性 > "%CSV_NAME%"

REM カレントフォルダの処理
echo 現在のフォルダを処理しています...
call :ProcessFiles "." "%CSV_NAME%"

REM サブフォルダ処理が選択された場合、すべてのサブフォルダを再帰的に処理
if "%INCLUDE_SUBFOLDERS%"=="Y" (
    echo すべてのサブフォルダを再帰的に処理しています...
    call :ProcessAllSubfolders "." "%CSV_NAME%"
)

echo.
echo 処理が完了しました。
echo.
echo 合計 %FILE_COUNT% 個のファイル情報を取得しました。
echo (現在のフォルダ名を冠したCSVファイル(このバッチファイルで作成したもの)はファイル情報取得の対象外です)
echo.
echo ファイル "%CSV_NAME%" が作成されました。
echo.
echo 終了するには何かキーを押してください...
pause > nul
goto :EOF

:ProcessAllSubfolders
REM すべてのサブフォルダを再帰的に処理
REM 引数1: 処理する親フォルダパス
REM 引数2: 出力CSVファイル名

set "PARENT_PATH=%~1"
set "OUTPUT_CSV=%~2"

REM 直下のサブフォルダを処理
for /d %%D in ("%PARENT_PATH%\*") do (
    set "SUB_PATH=%%D"
    set "REL_PATH=!SUB_PATH:%CURRENT_DIR%\=!"
    
    echo サブフォルダ: !REL_PATH! を処理中...
    
    REM サブフォルダのファイル情報を処理
    call :ProcessFiles "!SUB_PATH!" "%OUTPUT_CSV%"
    
    REM そのサブフォルダのサブフォルダを再帰的に処理
    call :ProcessAllSubfolders "!SUB_PATH!" "%OUTPUT_CSV%"
)

goto :EOF

:ProcessFiles
REM 引数1: 処理するフォルダパス
REM 引数2: 出力CSVファイル名

set "FOLDER_PATH=%~1"
set "OUTPUT_CSV=%~2"

REM フォルダのフルパスを取得
for %%F in ("%FOLDER_PATH%") do set "FOLDER_FULL_PATH=%%~fF"

REM 全ファイル情報を取得(隠しファイルを含む、サブフォルダ内のファイルは含まない)
for /f "tokens=*" %%F in ('dir /a-d /b "%FOLDER_PATH%" 2^>nul') do (
    set "FILE_NAME=%%F"
    set "FILE_PATH=%FOLDER_PATH%\!FILE_NAME!"
    set "FILE_PATH=!FILE_PATH:.\=!"
    
    REM ファイルのフルパスを取得
    for %%P in ("!FILE_PATH!") do set "FILE_FULL_PATH=%%~fP"
    
    REM ファイルの拡張子を確認
    for %%X in ("!FILE_PATH!") do set "FILE_EXT=%%~xX"
    
    REM CSV形式のファイルかどうか確認
    set "IS_CSV="
    if /i "!FILE_EXT!"==".csv" set "IS_CSV=1"
    
    REM フォルダ名を含むCSVファイルパターンをチェック
    set "IS_TARGET_CSV="
    if defined IS_CSV (
        set "IS_TARGET_CSV="
        if /i "!FILE_NAME!"=="%BASE_CSV_NAME%" set "IS_TARGET_CSV=1"
        for /L %%i in (1,1,100) do (
            if /i "!FILE_NAME!"=="%FOLDER_NAME%_%%i.csv" set "IS_TARGET_CSV=1"
        )
    )
    
    REM バッチファイル自身と生成したCSVファイル、および同じパターンの既存CSVを除外
    if /i not "!FILE_FULL_PATH!"=="!BATCH_FILE_FULLPATH!" if /i not "!FILE_FULL_PATH!"=="!CSV_FILE_FULLPATH!" (
        if not defined IS_TARGET_CSV (
            REM ファイルサイズを取得
            for %%S in ("!FILE_PATH!") do set "SIZE=%%~zS"
            
            REM ファイル属性を正確に取得
            set "ATTR_STRING="
            set "ATTR_ARCHIVE="
            set "ATTR_READONLY="
            set "ATTR_HIDDEN="
            set "ATTR_SYSTEM="
            
            REM attribコマンドの出力を直接解析
            for /f "tokens=*" %%a in ('attrib "!FILE_FULL_PATH!" 2^>nul') do (
                set "ATTR_LINE=%%a"
                
                REM 各属性をチェック(先頭から少なくとも10文字以上を取得して確実に属性部分をカバー)
                set "ATTR_PART=!ATTR_LINE:~0,10!"
                
                if "!ATTR_PART!" neq "" (
                    echo !ATTR_PART! | findstr /C:"A" >nul && set "ATTR_ARCHIVE=A"
                    echo !ATTR_PART! | findstr /C:"R" >nul && set "ATTR_READONLY=R"
                    echo !ATTR_PART! | findstr /C:"H" >nul && set "ATTR_HIDDEN=H"
                    echo !ATTR_PART! | findstr /C:"S" >nul && set "ATTR_SYSTEM=S"
                )
            )
            
            REM 属性文字列を構築
            set "ATTR_STRING=!ATTR_ARCHIVE!!ATTR_READONLY!!ATTR_HIDDEN!!ATTR_SYSTEM!"
            
            REM 属性がない場合は「NONE」と表示
            if "!ATTR_STRING!"=="" set "ATTR_STRING=NONE"
            
            REM wmicコマンドを使用して詳細な日時情報を取得
            REM エスケープされたファイルパスを準備(バックスラッシュをエスケープ)
            set "ESC_PATH=!FILE_FULL_PATH:\=\\!"
            
            REM 作成日時、最終更新日時、最終アクセス日時を取得
            for /f "skip=1 tokens=1,2 delims==" %%a in ('wmic datafile where name^="!ESC_PATH!" get CreationDate /value 2^>nul') do (
                if "%%a"=="CreationDate" (
                    set "WMIC_CREATE=%%b"
                    REM WMIC日時形式(YYYYMMDDHHmmss.000000+000)を変換
                    set "CREATE_YEAR=!WMIC_CREATE:~0,4!"
                    set "CREATE_MONTH=!WMIC_CREATE:~4,2!"
                    set "CREATE_DAY=!WMIC_CREATE:~6,2!"
                    set "CREATE_HOUR=!WMIC_CREATE:~8,2!"
                    set "CREATE_MIN=!WMIC_CREATE:~10,2!"
                    set "CREATE_SEC=!WMIC_CREATE:~12,2!"
                    set "CREATE_DATE=!CREATE_YEAR!/!CREATE_MONTH!/!CREATE_DAY! !CREATE_HOUR!:!CREATE_MIN!:!CREATE_SEC!"
                )
            )
            
            for /f "skip=1 tokens=1,2 delims==" %%a in ('wmic datafile where name^="!ESC_PATH!" get LastModified /value 2^>nul') do (
                if "%%a"=="LastModified" (
                    set "WMIC_MODIFY=%%b"
                    set "MODIFY_YEAR=!WMIC_MODIFY:~0,4!"
                    set "MODIFY_MONTH=!WMIC_MODIFY:~4,2!"
                    set "MODIFY_DAY=!WMIC_MODIFY:~6,2!"
                    set "MODIFY_HOUR=!WMIC_MODIFY:~8,2!"
                    set "MODIFY_MIN=!WMIC_MODIFY:~10,2!"
                    set "MODIFY_SEC=!WMIC_MODIFY:~12,2!"
                    set "MODIFY_DATE=!MODIFY_YEAR!/!MODIFY_MONTH!/!MODIFY_DAY! !MODIFY_HOUR!:!MODIFY_MIN!:!MODIFY_SEC!"
                )
            )
            
            for /f "skip=1 tokens=1,2 delims==" %%a in ('wmic datafile where name^="!ESC_PATH!" get LastAccessed /value 2^>nul') do (
                if "%%a"=="LastAccessed" (
                    set "WMIC_ACCESS=%%b"
                    set "ACCESS_YEAR=!WMIC_ACCESS:~0,4!"
                    set "ACCESS_MONTH=!WMIC_ACCESS:~4,2!"
                    set "ACCESS_DAY=!WMIC_ACCESS:~6,2!"
                    set "ACCESS_HOUR=!WMIC_ACCESS:~8,2!"
                    set "ACCESS_MIN=!WMIC_ACCESS:~10,2!"
                    set "ACCESS_SEC=!WMIC_ACCESS:~12,2!"
                    set "ACCESS_DATE=!ACCESS_YEAR!/!ACCESS_MONTH!/!ACCESS_DAY! !ACCESS_HOUR!:!ACCESS_MIN!:!ACCESS_SEC!"
                )
            )
            
            REM 何らかの理由で日時情報が取得できなかった場合のフォールバック
            if not defined CREATE_DATE (
                for /f "tokens=1-5 delims= " %%A in ('dir /a-d /T:C "!FILE_PATH!" ^| findstr /i "!FILE_NAME!" 2^>nul') do (
                    set "CREATE_DATE=%%A %%B"
                )
            )
            
            if not defined MODIFY_DATE (
                for /f "tokens=1-5 delims= " %%A in ('dir /a-d /T:W "!FILE_PATH!" ^| findstr /i "!FILE_NAME!" 2^>nul') do (
                    set "MODIFY_DATE=%%A %%B"
                )
            )
            
            if not defined ACCESS_DATE (
                for /f "tokens=1-5 delims= " %%A in ('dir /a-d /T:A "!FILE_PATH!" ^| findstr /i "!FILE_NAME!" 2^>nul') do (
                    set "ACCESS_DATE=%%A %%B"
                )
            )
            
            REM CSVに出力(カンマを含むファイル名対応のためダブルクォートで囲む)
            echo "!FILE_NAME!","!FILE_FULL_PATH!","!FOLDER_FULL_PATH!",!SIZE!,"!CREATE_DATE!","!MODIFY_DATE!","!ACCESS_DATE!","!ATTR_STRING!" >> "%OUTPUT_CSV%"
            
            REM ファイル数をカウントアップ
            set /a FILE_COUNT+=1
        )
    )
)

goto :EOF

ファイル名は何でもかまいません。



バッチファイルの使い方

このバッチファイルは、以下の手順で使えます。

目的フォルダの中にバッチファイルを配置します

情報を取得したいファイルがあるフォルダの中にバッチファイルを配置します。

以下の例では、「テスト」フォルダの中にバッチファイル(ファイル情報取得.bat)を置きました。

バッチファイルを目的フォルダに配置した状態

この「テスト」フォルダ(上のイラスト)の中の「サブフォルダ」の中には、以下の2つのファイルが存在するとします。

サブフォルダ内のファイル

この例では、「テスト」フォルダと「サブフォルダ」の中には、バッチファイルを除いて5個のファイルが存在します。

バッチファイルをダブルクリックします

処理を開始するには、バッチファイルをダブルクリックします。

今回の例では、上に示した「テスト」フォルダ内でバッチファイルをダブルクリックして実行ます。

バッチファイルを実行すると以下のメッセージが出ます。

バッチファイルのダブルクリック時に表示されるメッセージ

この状態で、またの数字を半角で入力してください。

を選ぶと、現在のフォルダ内のファイルの情報のみを取得します。

を選ぶと、現在のフォルダ内とサブフォルダ内のファイルの情報を取得します。

今回の例では、を選んでみます。

数字を入力したらエンターキーを押します。

バッチファイルの処理が終了した状態

エンターキーを押すと処理が始まり、上のイラストのようなメッセージが出て処理が終了します。

上のメッセージから5個のファイルの情報が取得され、「テスト.csv」が作成されたことが分かります。

バッチファイル自体は情報の取得対象にはなりません

CSVファイルの名前は、バッチファイルが実行されたフォルダ名になります

実際のフォルダの中は、以下のようになり、「テスト.csv」が作成されます。

バッチファイルを実行したフォルダの中にCSVファイルが作成された状態

今回の例では、「テスト.csv」の中身は、以下のイラストのようになります(CSVファイルをエクセルで開いた状態です)。

出力CSVファイルをエクセルで開いた例

今回の例では、モードを選んだため、サブフォルダ内のファイルの情報も取得されています。

取得される情報の種類は、以下になります。

取得される情報

  • ファイル名
  • ファイルのフルパス
  • フォルダのフルパス
  • サイズ(バイト)
  • 作成日時
  • 最終更新日時
  • 最終アクセス日時
  • 属性




補足説明

CSVファイルの扱い

同名のCSVファイルが既に存在する場合、上書きはされず、末尾に番号が付加されたCSVファイルが作成されます。

また、このバッチファイルを実行するフォルダの名前が付いたCSVファイル(このバッチファイルで作成した形式のもの)は、それらが現在のフォルダ内にあろうと、サブフォルダ内にあろうと、情報取得の対象外になります

例えば、「テスト」フォルダ内でバッチファイルを実行する場合、このバッチファイルによって作成された「テスト.csv」と「テスト1.csv」が既に存在すると、それらは、現在のフォルダ(「テスト」フォルダ)の中にあろうと、その中のサブフォルダの中にあろうと、処理対象になります。

一方、「テスト」フォルダ以外の中でバッチファイルを実行した場合は、「テスト.csv」と「テスト1.csv」は、情報の取得対象になります

処理の中断

バッチファイルがあるフォルダやサブフォルダの中にファイルが大量に存在する場合、処理に時間がかかることがあります。

処理を中断したい場合は、「Ctrl」キーを押しながら「C」キーを押してください。

その際、「バッチジョブを終了しますか(Y/N)?」と聞かれますので、Y(半角)と入力してエンターキーを押してください。

これで処理が終了します。

画面自体を閉じることでも処理が強制終了しますが、上記の方法の方が理想的です。



バッチファイルの作成方法(コード)

このバッチファイルの作り方はシンプルです。

別の記事で紹介した「バッチファイルの作成方法」の手順3で、以下のコードをメモ帳に貼り付けるだけです。

バッチファイルの名前は何でもかまいません。

@echo off
setlocal enabledelayedexpansion

REM V01L02

echo ファイル情報収集ツール
echo ====================
echo.
echo 収集対象の選択:
echo 1. 現在のフォルダ内のファイル情報のみ
echo 2. 現在のフォルダとすべてのサブフォルダ内のファイル情報
echo.

:ask_scope
set /p SCOPE_CHOICE="選択してください (1 または 2): "

if "%SCOPE_CHOICE%"=="1" (
    set INCLUDE_SUBFOLDERS=N
) else if "%SCOPE_CHOICE%"=="2" (
    set INCLUDE_SUBFOLDERS=Y
) else (
    echo 入力が無効です。1 または 2 を入力してください。
    goto ask_scope
)

echo.

REM ファイル数をカウントするためのカウンタを初期化
set FILE_COUNT=0

REM カレントディレクトリのフォルダ名を取得
for %%I in (.) do set "FOLDER_NAME=%%~nxI"
set "CURRENT_DIR=%CD%"

REM 出力CSVファイル名の設定
set "BASE_CSV_NAME=%FOLDER_NAME%.csv"
set "CSV_NAME=%BASE_CSV_NAME%"

REM 同名ファイルが存在する場合、連番付与
set counter=1
:checkFile
if exist "%CSV_NAME%" (
    set "CSV_NAME=%FOLDER_NAME%_%counter%.csv"
    set /a counter+=1
    goto checkFile
)

REM 作成するCSVファイル名を保存(後で除外に使用)
set "CSV_FILE_FULLPATH=%CD%\%CSV_NAME%"
set "BATCH_FILE_FULLPATH=%~f0"

REM CSVヘッダーの作成
echo ファイル名,ファイルのフルパス,フォルダのフルパス,サイズ(バイト),作成日時,最終更新日時,最終アクセス日時,属性 > "%CSV_NAME%"

REM カレントフォルダの処理
echo 現在のフォルダを処理しています...
call :ProcessFiles "." "%CSV_NAME%"

REM サブフォルダ処理が選択された場合、すべてのサブフォルダを再帰的に処理
if "%INCLUDE_SUBFOLDERS%"=="Y" (
    echo すべてのサブフォルダを再帰的に処理しています...
    call :ProcessAllSubfolders "." "%CSV_NAME%"
)

echo.
echo 処理が完了しました。
echo.
echo 合計 %FILE_COUNT% 個のファイル情報を取得しました。
echo (現在のフォルダ名を冠したCSVファイル(このバッチファイルで作成したもの)はファイル情報取得の対象外です)
echo.
echo ファイル "%CSV_NAME%" が作成されました。
echo.
echo 終了するには何かキーを押してください...
pause > nul
goto :EOF

:ProcessAllSubfolders
REM すべてのサブフォルダを再帰的に処理
REM 引数1: 処理する親フォルダパス
REM 引数2: 出力CSVファイル名

set "PARENT_PATH=%~1"
set "OUTPUT_CSV=%~2"

REM 直下のサブフォルダを処理
for /d %%D in ("%PARENT_PATH%\*") do (
    set "SUB_PATH=%%D"
    set "REL_PATH=!SUB_PATH:%CURRENT_DIR%\=!"
    
    echo サブフォルダ: !REL_PATH! を処理中...
    
    REM サブフォルダのファイル情報を処理
    call :ProcessFiles "!SUB_PATH!" "%OUTPUT_CSV%"
    
    REM そのサブフォルダのサブフォルダを再帰的に処理
    call :ProcessAllSubfolders "!SUB_PATH!" "%OUTPUT_CSV%"
)

goto :EOF

:ProcessFiles
REM 引数1: 処理するフォルダパス
REM 引数2: 出力CSVファイル名

set "FOLDER_PATH=%~1"
set "OUTPUT_CSV=%~2"

REM フォルダのフルパスを取得
for %%F in ("%FOLDER_PATH%") do set "FOLDER_FULL_PATH=%%~fF"

REM 全ファイル情報を取得(隠しファイルを含む、サブフォルダ内のファイルは含まない)
for /f "tokens=*" %%F in ('dir /a-d /b "%FOLDER_PATH%" 2^>nul') do (
    set "FILE_NAME=%%F"
    set "FILE_PATH=%FOLDER_PATH%\!FILE_NAME!"
    set "FILE_PATH=!FILE_PATH:.\=!"
    
    REM ファイルのフルパスを取得
    for %%P in ("!FILE_PATH!") do set "FILE_FULL_PATH=%%~fP"
    
    REM ファイルの拡張子を確認
    for %%X in ("!FILE_PATH!") do set "FILE_EXT=%%~xX"
    
    REM CSV形式のファイルかどうか確認
    set "IS_CSV="
    if /i "!FILE_EXT!"==".csv" set "IS_CSV=1"
    
    REM フォルダ名を含むCSVファイルパターンをチェック
    set "IS_TARGET_CSV="
    if defined IS_CSV (
        set "IS_TARGET_CSV="
        if /i "!FILE_NAME!"=="%BASE_CSV_NAME%" set "IS_TARGET_CSV=1"
        for /L %%i in (1,1,100) do (
            if /i "!FILE_NAME!"=="%FOLDER_NAME%_%%i.csv" set "IS_TARGET_CSV=1"
        )
    )
    
    REM バッチファイル自身と生成したCSVファイル、および同じパターンの既存CSVを除外
    if /i not "!FILE_FULL_PATH!"=="!BATCH_FILE_FULLPATH!" if /i not "!FILE_FULL_PATH!"=="!CSV_FILE_FULLPATH!" (
        if not defined IS_TARGET_CSV (
            REM ファイルサイズを取得
            for %%S in ("!FILE_PATH!") do set "SIZE=%%~zS"
            
            REM ファイル属性を正確に取得
            set "ATTR_STRING="
            set "ATTR_ARCHIVE="
            set "ATTR_READONLY="
            set "ATTR_HIDDEN="
            set "ATTR_SYSTEM="
            
            REM attribコマンドの出力を直接解析
            for /f "tokens=*" %%a in ('attrib "!FILE_FULL_PATH!" 2^>nul') do (
                set "ATTR_LINE=%%a"
                
                REM 各属性をチェック(先頭から少なくとも10文字以上を取得して確実に属性部分をカバー)
                set "ATTR_PART=!ATTR_LINE:~0,10!"
                
                if "!ATTR_PART!" neq "" (
                    echo !ATTR_PART! | findstr /C:"A" >nul && set "ATTR_ARCHIVE=A"
                    echo !ATTR_PART! | findstr /C:"R" >nul && set "ATTR_READONLY=R"
                    echo !ATTR_PART! | findstr /C:"H" >nul && set "ATTR_HIDDEN=H"
                    echo !ATTR_PART! | findstr /C:"S" >nul && set "ATTR_SYSTEM=S"
                )
            )
            
            REM 属性文字列を構築
            set "ATTR_STRING=!ATTR_ARCHIVE!!ATTR_READONLY!!ATTR_HIDDEN!!ATTR_SYSTEM!"
            
            REM 属性がない場合は「NONE」と表示
            if "!ATTR_STRING!"=="" set "ATTR_STRING=NONE"
            
            REM wmicコマンドを使用して詳細な日時情報を取得
            REM エスケープされたファイルパスを準備(バックスラッシュをエスケープ)
            set "ESC_PATH=!FILE_FULL_PATH:\=\\!"
            
            REM 作成日時、最終更新日時、最終アクセス日時を取得
            for /f "skip=1 tokens=1,2 delims==" %%a in ('wmic datafile where name^="!ESC_PATH!" get CreationDate /value 2^>nul') do (
                if "%%a"=="CreationDate" (
                    set "WMIC_CREATE=%%b"
                    REM WMIC日時形式(YYYYMMDDHHmmss.000000+000)を変換
                    set "CREATE_YEAR=!WMIC_CREATE:~0,4!"
                    set "CREATE_MONTH=!WMIC_CREATE:~4,2!"
                    set "CREATE_DAY=!WMIC_CREATE:~6,2!"
                    set "CREATE_HOUR=!WMIC_CREATE:~8,2!"
                    set "CREATE_MIN=!WMIC_CREATE:~10,2!"
                    set "CREATE_SEC=!WMIC_CREATE:~12,2!"
                    set "CREATE_DATE=!CREATE_YEAR!/!CREATE_MONTH!/!CREATE_DAY! !CREATE_HOUR!:!CREATE_MIN!:!CREATE_SEC!"
                )
            )
            
            for /f "skip=1 tokens=1,2 delims==" %%a in ('wmic datafile where name^="!ESC_PATH!" get LastModified /value 2^>nul') do (
                if "%%a"=="LastModified" (
                    set "WMIC_MODIFY=%%b"
                    set "MODIFY_YEAR=!WMIC_MODIFY:~0,4!"
                    set "MODIFY_MONTH=!WMIC_MODIFY:~4,2!"
                    set "MODIFY_DAY=!WMIC_MODIFY:~6,2!"
                    set "MODIFY_HOUR=!WMIC_MODIFY:~8,2!"
                    set "MODIFY_MIN=!WMIC_MODIFY:~10,2!"
                    set "MODIFY_SEC=!WMIC_MODIFY:~12,2!"
                    set "MODIFY_DATE=!MODIFY_YEAR!/!MODIFY_MONTH!/!MODIFY_DAY! !MODIFY_HOUR!:!MODIFY_MIN!:!MODIFY_SEC!"
                )
            )
            
            for /f "skip=1 tokens=1,2 delims==" %%a in ('wmic datafile where name^="!ESC_PATH!" get LastAccessed /value 2^>nul') do (
                if "%%a"=="LastAccessed" (
                    set "WMIC_ACCESS=%%b"
                    set "ACCESS_YEAR=!WMIC_ACCESS:~0,4!"
                    set "ACCESS_MONTH=!WMIC_ACCESS:~4,2!"
                    set "ACCESS_DAY=!WMIC_ACCESS:~6,2!"
                    set "ACCESS_HOUR=!WMIC_ACCESS:~8,2!"
                    set "ACCESS_MIN=!WMIC_ACCESS:~10,2!"
                    set "ACCESS_SEC=!WMIC_ACCESS:~12,2!"
                    set "ACCESS_DATE=!ACCESS_YEAR!/!ACCESS_MONTH!/!ACCESS_DAY! !ACCESS_HOUR!:!ACCESS_MIN!:!ACCESS_SEC!"
                )
            )
            
            REM 何らかの理由で日時情報が取得できなかった場合のフォールバック
            if not defined CREATE_DATE (
                for /f "tokens=1-5 delims= " %%A in ('dir /a-d /T:C "!FILE_PATH!" ^| findstr /i "!FILE_NAME!" 2^>nul') do (
                    set "CREATE_DATE=%%A %%B"
                )
            )
            
            if not defined MODIFY_DATE (
                for /f "tokens=1-5 delims= " %%A in ('dir /a-d /T:W "!FILE_PATH!" ^| findstr /i "!FILE_NAME!" 2^>nul') do (
                    set "MODIFY_DATE=%%A %%B"
                )
            )
            
            if not defined ACCESS_DATE (
                for /f "tokens=1-5 delims= " %%A in ('dir /a-d /T:A "!FILE_PATH!" ^| findstr /i "!FILE_NAME!" 2^>nul') do (
                    set "ACCESS_DATE=%%A %%B"
                )
            )
            
            REM CSVに出力(カンマを含むファイル名対応のためダブルクォートで囲む)
            echo "!FILE_NAME!","!FILE_FULL_PATH!","!FOLDER_FULL_PATH!",!SIZE!,"!CREATE_DATE!","!MODIFY_DATE!","!ACCESS_DATE!","!ATTR_STRING!" >> "%OUTPUT_CSV%"
            
            REM ファイル数をカウントアップ
            set /a FILE_COUNT+=1
        )
    )
)

goto :EOF




当ブログのバッチファイル一覧

以下は、このブログで紹介しているバッチファイルの一覧です。

コピペするだけで使えます

陰キャくじら
陰キャくじら

各バッチファイルの概要をイラストで見たい方は、こちらをご参照ください。

ファイル名の一括変更

ファイル名を一括で変更するバッチファイルこちら

ファイル名の一部を一括で変更/削除するバッチファイルこちら

ファイル名に作成日/更新日を一括追加するバッチファイルこちら

ファイル名の先頭/末尾の文字列を追加/削除するバッチファイルこちら

拡張子の一括変更

ファイルの拡張子を一括で変更するバッチファイルこちら

ファイル情報の取得

ファイルのフルパスを瞬時に取得するバッチファイルこちら

フォルダ内のファイル情報をCSV出力するバッチファイルこちら(ファイル名、フルパス、作成日、更新日、属性などの情報が取得できます)

ショートカット整理

複数のショートカットを1つにまとめて整理するバッチファイルこちら

ファイル整理

ファイルを種類ごとに自動でフォルダ分けするバッチファイルこちら

データバックアップ

パソコンデータをミラーリングしてUSBメモリにバックアップするバッチファイルこちら

【スポンサーリンク】



-バッチファイル
-,