Advertisement
OgreVorbis

Batch Fix Datestamps After File Conversion

Apr 24th, 2025
235
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Batch 3.14 KB | None | 0 0
  1. +*****************************************************************************************+
  2. *******************************************************************************************
  3. ** THIS IS AN EPIC UBER MEGA BATCH FILE THAT EVEN TOOK CHATGPT MANY HOURS TO GET RIGHT.  **
  4. ** THIS IS A BATCH FILE TO COPY DATE/TIME STAMPS FROM ALL FILES OF A SPECIFIC TYPE IN    **
  5. ** ONE DIRECTORY TO ALL FILES OF THE SAME NAME, BUT DIFFERENT TYPE IN ANOTHER DIRECTORY. **
  6. ** IT IS TO BE USED AFTER BATCH CONVERSION OF FILES FROM ONE FORMAT TO ANOTHER WHERE     **
  7. ** YOU WANT TO RETAIN THE DATE/TIME STAMP OF THE ORIGINAL FILES. FOR EXAMPLE, YOU USED   **
  8. ** EITHER HANDBRAKE OR FFMPEG TO CONVERT A BUNCH OF STUFF, BUT NOW THOSE NEW FILES HAVE  **
  9. ** THE DATE/TIME OF THE CONVERSION RATHER THAN OF THE ORIGINAL RECORDING DATE. THIS      **
  10. ** FIXES THAT SITUATION.                       (C)OPYLEFT 2025 OGREVORBIS   DOSAIDSOFT   **
  11. **                                                                                       **
  12. ** (note: like one out of every 20 files, it will get the time off by only like 1 hour)  **
  13. ** (prerequisite: nircmd - from Nir Sofer - nirsoft)                                     **
  14. *******************************************************************************************
  15. +*****************************************************************************************+
  16.  
  17. @echo off
  18. setlocal enabledelayedexpansion
  19.  
  20. if "%~1"=="" (
  21.     echo Please provide the source directory as the first parameter.
  22.     exit /b 1
  23. )
  24. if "%~2"=="" (
  25.     echo Please provide the target directory as the second parameter.
  26.     exit /b 1
  27. )
  28.  
  29. set "SOURCE_DIR=%~1"
  30. set "TARGET_DIR=%~2"
  31.  
  32. :: Loop through all MP4 files
  33. for %%F in ("%SOURCE_DIR%\*.mp4") do (
  34.     set "FILENAME=%%~nF"
  35.     set "DEST_FILE=%TARGET_DIR%\!FILENAME!.ogg"
  36.  
  37.     if exist "!DEST_FILE!" (
  38.        rem Extract full timestamp string from the source file
  39.         for %%D in ("%%~fF") do set "STAMP=%%~tD"
  40.  
  41.         rem Split STAMP into date and time parts
  42.         for /f "tokens=1,2,3" %%a in ("!STAMP!") do (
  43.             set "DATE=%%a"
  44.             set "TIME=%%b"
  45.             set "AMPM=%%c"
  46.         )
  47.  
  48.         rem Parse DATE - assume system format is MM/DD/YYYY
  49.         for /f "tokens=1,2,3 delims=/" %%d in ("!DATE!") do (
  50.             set "DD=%%d"
  51.             set "MM=%%e"
  52.             set "YYYY=%%f"
  53.         )
  54.  
  55.         rem Parse TIME - separate hours and minutes
  56.         for /f "tokens=1,2 delims=:" %%g in ("!TIME!") do (
  57.             set "HOUR=%%g"
  58.             set "MIN=%%h"
  59.         )
  60.  
  61.         rem Adjust hour for AM/PM
  62.         if "!AMPM!"=="PM" (
  63.             if NOT "!HOUR!"=="12" (
  64.                 set /a HOUR=1!HOUR! - 100 + 12
  65.             )
  66.         ) else (
  67.             if "!HOUR!"=="12" (
  68.                 set "HOUR=0"
  69.             )
  70.         )
  71.  
  72.         rem Assemble final timestamp string for NirCmd
  73.         set "FINALSTAMP=!MM!-!DD!-!YYYY! !HOUR!:!MIN!:00"
  74.  
  75.         echo Setting timestamp on: !DEST_FILE! to !FINALSTAMP!
  76.         nircmd.exe setfiletime "!DEST_FILE!" now "!FINALSTAMP!" ""
  77.     ) else (
  78.         echo Skipping: !DEST_FILE! (not found)
  79.     )
  80. )
  81.  
  82. echo Done.
  83. pause
  84.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement