'List all files with 2 timestamps, size, but without path or dir

Windows, Command Prompt, need to generate a .txt file output containing of all files from a big and complex dir tree with one (1) line for each files as:

CreationDateYYYYMMDD-HHMMSS, LastModifiedYYYYMMDD-HHMMSS, filesize[no K commas], filename.ext

for example:

20100101-174503, 20120202-191536, 1589567, myfile.ext

The list should not contain lines of dir name entries, etc., only filenames, even if the same file is present in more than once. Time in 24 hours format.

dir /s/t:c/t:w/-c > filelist.txt

command does not exactly works this way.



Solution 1:[1]

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET "sourcedir=c:\program files"
FOR /f "delims=" %%a IN (
  'dir /s /b /a-d "%sourcedir%\*" '
  ) DO (
  FOR %%d IN (timewritten timecreated) DO SET "%%d="
  FOR %%k IN (-d s h) DO (
   IF NOT DEFINED timewritten FOR /f "tokens=1,2 delims= " %%d IN ('dir /tw %%~k "%%a" 2^>nul ^|find "%%~nxa"') DO SET "timewritten=%%d %%e"
   IF NOT DEFINED timecreated FOR /f "tokens=1,2 delims= " %%d IN ('dir /tc %%~k "%%a" 2^>nul ^|find "%%~nxa"') DO SET "timecreated=%%d %%e"
  )
  ECHO !timecreated! !timewritten! %%~za %%~nxa
  )
)
GOTO :EOF

You would need to change the setting of sourcedir to suit your circumstances.

Interesting problem. This code processes it by

First, applying the standard directory-list for filenames on the tree from the relative root (%sourcedir%) to %%a

Using the full filename in %%a, set timewritten and timecreated from an ordinary dir list targeting the file in question.

It appeared that %%~ta didn't play nicely to extract the timestamp for hidden and system files, so I decided to build them from the ordinary dir listing with the appropriate t setting, specifically listing with /a-d, /as and /ah and filtering for the line which matched the filename, which seemed to extract the data appropriately.

I left the date/time in raw format. It should be an easy task to extract the various elements and construct the report in the format you want.

Solution 2:[2]

This question is a dupe of the SO post cmd dir /b/s plus date, but posting what worked for me:

@echo off
REM list files with timestamp
REM Filename first then timestamp
for /R %I in (*.*) do @echo %~dpnxI %~tI

@echo off
REM list files with timestamp
REM Timestamp first then name
for /R %I in (*.*) do @echo %~tI %~dpnxI

The above are the versions that you would directly paste into a command prompt. If you want to use these in a batch file and log the output, you could do something like:

rem: Place the following in a batch file such as DirectoriesBareWithTS.cmd.
rem: As the first step in the batch file, net use to the directory or share you want the listing of
rem: Change to your target directory 
Y:
for /R %%I in (*.mp4) do @echo %%~tI %%~dpnxI 

Then you can pipe the output to a log file when you execute:

DirectoriesBareWithTS.cmd > C:\temp\GiantLongDirListing.log

You could then import that log into Excel.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Magoo
Solution 2 Charlesdwm