[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[日期时间] 批处理如何获取视频文件的“创建媒体日期”并重命名给该视频文件?

问一下,如何获取视频文件的“创建媒体日期”并重命名给该视频文件?

单个文件-获取.bat
  1. @echo off
  2. REM 1、下载 MediaInfo 这个命令行工具
  3. REM https://mediaarea.net/download/binary/mediainfo/23.10/MediaInfo_CLI_23.10_Windows_x64.zip
  4. REM 2、解压缩之后找到MediaInfo.exe、LIBCURL.DLL放在其中一个目录下:
  5. REM (1)跟 .bat 脚本放在同一个目录下
  6. REM (2)放在 C:\Windows\System32 目录下
  7. cd /d "%~dp0"
  8. for /f %%i in ('mediainfo.exe "input.mp4" ^| findstr /b "Encoded date"') do (
  9.     set "VideoEncodeDate=%%i"
  10. )
  11. echo,%VideoEncodeDate%
  12. pause
复制代码
单个文件-重命名.bat
  1. @echo off
  2. REM 1、下载 MediaInfo 这个命令行工具
  3. REM https://mediaarea.net/download/binary/mediainfo/23.10/MediaInfo_CLI_23.10_Windows_x64.zip
  4. REM 2、解压缩之后找到MediaInfo.exe、LIBCURL.DLL放在其中一个目录下:
  5. REM (1)跟 .bat 脚本放在同一个目录下
  6. REM (2)放在 C:\Windows\System32 目录下
  7. cd /d "%~dp0"
  8. set "OldName=input.mp4"
  9. for /f "tokens=4" %%i in ('mediainfo.exe "%OldName%" ^| findstr /b "Encoded date"') do (
  10.     set "VideoEncodeDate=%%i"
  11. )
  12. ren "%OldName%" "%VideoEncodeDate%_%OldName%"
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 8# jyswjjgdwtdtj


    vbs中文手册0.3里面有

QQ 20147578

TOP

第三方命令行工具MediaInfo应该可以

TOP

回复 8# jyswjjgdwtdtj


    应该是在找“创建媒体日期”的索引

TOP

回复  czjt1234


    哇 兄台 这是什么用法啊
jyswjjgdwtdtj 发表于 2023-4-5 21:20



   跟楼上大神讨论了一晚上了,基本实现功能了,正在解决重命名的问题

TOP

回复 4# czjt1234


    哇 兄台 这是什么用法啊
  1. For i = 0 To 500
  2.     If oFolder.GetDetailsOf(Null, i) = "创建媒体日期" Then n = i
  3. Next
复制代码
你好

TOP

batwmic
terse 发表于 2023-4-5 19:33



    这个不对,不是媒体创建日期,这个是文件创建日期。

TOP

powershell
  1. powershell -c "Get-ChildItem -Filter *.mov | %%{ren $_.FullName ($_.CreationTime.ToString('yyyyMMdd') + $_.Extension)}"
复制代码

TOP

bat
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "tokens=1-3*" %%a in ('dir /tc /a-d^|findstr  /il "\/"') do echo "%%d"  %%a %%b  
  3. pause
复制代码
wmic
  1. @echo off&setlocal enabledelayedexpansion
  2. for %%i in (*) do (
  3.      set fils=%%~fi
  4.      set fils=!fils:\=\\!
  5.      for /f "skip=1 tokens=1,3,5 delims=. " %%a in ('wmic datafile where name^="!fils!" get CreationDate^|findstr .') do (
  6.           set a=%%a
  7.           echo %%i !a:~0,4!-!a:~4,2!-!a:~6,2!:!a:~8,2!:!a:~10,2!:!a:~12,2!
  8.      )
  9. )
复制代码

TOP

本帖最后由 czjt1234 于 2023-4-5 19:00 编辑

vbs
  1. s = "D:\aaa"    '指定一个文件夹
  2. Set oWshShell = CreateObject("WScript.Shell")
  3. oWshShell.CurrentDirectory = s
  4. Set oFSO = CreateObject("Scripting.FileSystemObject")
  5. Set oShell = CreateObject("Shell.Application")
  6. Set oFolder = oShell.NameSpace(s)
  7. Set oFolderItems = oFolder.Items()
  8. oFolderItems.Filter &H40 + &H80 + &H10000, "*.*"
  9. For i = 0 To 500
  10.     If oFolder.GetDetailsOf(Null, i) = "创建媒体日期" Then n = i
  11. Next
  12. For Each i In oFolderItems
  13.     s = oFolder.GetDetailsOf(i, n)
  14.     If s <> "" Then
  15.         s = RePlace(s, ChrW(8206), "")
  16.         s = RePlace(s, ChrW(8207), "")
  17.         s = "-" & F_D_T(s, "yyyymmdd") & "."
  18.         i.Name = oFSO.GetBaseName(i.Name) & s & oFSO.GetExtensionName(i.Name)
  19.     End If
  20. Next
  21. MsgBox "ok"
  22. Function F_D_T(ByVal d, ByVal s)
  23.     Dim oSWbemDateTime, oWMI, i, TimeZone
  24.     Select Case UCase(s)
  25.         Case "CIM_DATETIME"
  26.             Set oSWbemDateTime = CreateObject("WbemScripting.SWbemDateTime")
  27.             oSWbemDateTime.SetVarDate d
  28.             F_D_T = oSWbemDateTime.Value
  29.         Case "INTERVAL FORMAT"
  30.             Set oSWbemDateTime = CreateObject("WbemScripting.SWbemDateTime")
  31.             oSWbemDateTime.SetVarDate d
  32.             oSWbemDateTime.IsInterval = True
  33.             F_D_T = oSWbemDateTime.Value
  34.         Case "FILENAME"   'UTC时间
  35.             Set oSWbemDateTime = CreateObject("WbemScripting.SWbemDateTime")
  36.             oSWbemDateTime.SetVarDate d
  37.             F_D_T = oSWbemDateTime.GetFileTime(False)
  38.         Case "UNIX"       '10位Unix时间戳,UTC时间
  39.             Set oWMI = GetObject("Winmgmts:\\.\Root\Cimv2")
  40.             For Each i In oWMI.ExecQuery("SELECT * FROM Win32_OperatingSystem")
  41.                 TimeZone = i.CurrentTimeZone
  42.             Next
  43.             i = DateDiff("s", #1970-01-01 00:00:00#, d)
  44.             F_D_T = i - TimeZone * 60
  45.         Case Else
  46.             s = Replace(s, "yyyy", Year(d), 1, -1, vbTextCompare)
  47.             s = Replace(s, "yy", Right(Year(d), 2), 1, -1, vbTextCompare)
  48.             s = Replace(s, "mm", Right("0" & Month(d), 2), 1, -1, vbBinaryCompare)
  49.             s = Replace(s, "m", Month(d), 1, -1, vbBinaryCompare)
  50.             s = Replace(s, "dd", Right("0" & Day(d), 2), 1, -1, vbTextCompare)
  51.             s = Replace(s, "d", Day(d), 1, -1, vbTextCompare)
  52.             s = Replace(s, "HH", Right("0" & Hour(d), 2), 1, -1, vbTextCompare)
  53.             s = Replace(s, "H", Hour(d), 1, -1, vbTextCompare)
  54.             s = Replace(s, "MM", Right("0" & Minute(d), 2), 1, -1, vbBinaryCompare)
  55.             s = Replace(s, "M", Minute(d), 1, -1, vbBinaryCompare)
  56.             s = Replace(s, "SS", Right("0" & Second(d), 2), 1, -1, vbTextCompare)
  57.             s = Replace(s, "S", Second(d), 1, -1, vbTextCompare)
  58.             F_D_T = s
  59.     End Select
  60. End Function
复制代码

QQ 20147578

TOP

本帖最后由 bdk3521 于 2023-4-5 18:33 编辑
网上搜了一篇帖子
通过wmic获取
jyswjjgdwtdtj 发表于 2023-4-5 17:51



    测试了,可以把我想要的日期搞出来,参数还没有找到

TOP

网上搜了一篇帖子https://www.cnblogs.com/ryanzheng/p/11117469.html
通过wmic获取
你好

TOP

返回列表