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

[其他] 【已解决】批量提取视频文件名和时长和大小

本帖最后由 285050551 于 2022-7-14 14:28 编辑

格式如下,每个目录里面都拥有一个.MP4的视频 格式是固定的MP4  其中影片的大小用GB或者MB表示   提取出来时候自动加上下面的内容,不是单独列出来参数


【影片名称】:
【影片格式】:MP4
【影片大小】:
【影片时间】:
【影片截图】:

  1. <#*,:&cls
  2. @echo off
  3. cd /d "%~dp0"
  4. powershell -C "Set-Location -LiteralPath ([Environment]::CurrentDirectory);. ([ScriptBlock]::Create((Get-Content -LiteralPath \"%~f0\" -ReadCount 0 | Out-String)))"
  5. pause
  6. exit /b
  7. #>
  8. # 获取当前目录及子目录的MP4视频信息,保存到 .mp4.log
  9. $conVideoSearchPattern = "*.mp4" #'视频类型
  10. $conRECURSE = $true #' 是否遍历子目录
  11. # ' shell content filter enum
  12. $SHCONTF_CHECKING_FOR_CHILDREN = 0x00010
  13. $SHCONTF_FOLDERS = 0x00020
  14. $SHCONTF_NONFOLDERS = 0x00040
  15. $SHCONTF_INCLUDEHIDDEN = 0x00080
  16. $SHCONTF_INIT_ON_FIRST_NEXT = 0x00100
  17. $SHCONTF_NETPRINTERSRCH = 0x00200
  18. $SHCONTF_SHAREABLE = 0x00400
  19. $SHCONTF_STORAGE = 0x00800
  20. $SHCONTF_NAVIGATION_ENUM = 0x01000
  21. $SHCONTF_FASTITEMS = 0x02000
  22. $SHCONTF_FLATLIST = 0x04000
  23. $SHCONTF_ENABLE_ASYNC = 0x08000
  24. $SHCONTF_INCLUDESUPERHIDDEN = 0x10000
  25. $shell = New-Object -ComObject Shell.Application
  26. function Format-FileSize {
  27.   # output: string
  28.   param (
  29.     [long]$FileSize
  30.   )
  31.   switch ($FileSize) {
  32.     { $_ -lt 1KB } { return "{0}Bytes" -f $_ }
  33.     { $_ -lt 1MB } { return "{0:F2}KB" -f ($_ / 1KB) }
  34.     { $_ -lt 1GB } { return "{0:F2}MB" -f ($_ / 1MB) }
  35.     { $_ -lt 1TB } { return "{0:F2}GB" -f ($_ / 1GB) }
  36.     { $_ -lt 1PB } { return "{0:F2}TB" -f ($_ / 1TB) }
  37.     Default { return "{0:F1}PB" -f ($_ / 1PB) }
  38.   }
  39. }
  40. function GenFolderItem {
  41.   param (
  42.     $folderItem
  43.   )
  44.   Write-Host $folderItem.Name
  45.   Set-Content -LiteralPath ($folderItem.Path + '.log') -Value $(
  46.     '【影片名称】:{0}' -f $folderItem.Name
  47.     '【影片格式】: MP4'
  48.     '【影片大小】:{0}' -f (Format-FileSize $folderItem.Size)
  49.     '【影片时间】:{0}' -f ([timespan]::FromTicks($folderItem.ExtendedProperty("System.Media.Duration")))
  50.     '【影片截图】:'
  51.   )
  52. }
  53. function GenFolder {
  54.   param (
  55.     $shellFolder
  56.   )
  57.   if ($null -eq $shellFolder -or [convert]::IsDBNull($shellFolder)) {
  58.     return
  59.   }
  60.   $folderItems = $shellFolder.Items()
  61.   $null = $folderItems.Filter($SHCONTF_NONFOLDERS -bor $SHCONTF_INCLUDEHIDDEN -bor $SHCONTF_INCLUDESUPERHIDDEN, $conVideoSearchPattern)
  62.   foreach ($folderItem in $folderItems) {
  63.     GenFolderItem $folderItem
  64.   }
  65.   if ($conRECURSE) {
  66.     $null = $folderItems.Filter($SHCONTF_FOLDERS -bor $SHCONTF_INCLUDEHIDDEN -bor $SHCONTF_INCLUDESUPERHIDDEN, "*.*")
  67.     foreach ($folderItem in $folderItems) {
  68.       GenFolder $folderItem.GetFolder()
  69.     }
  70.   }
  71. }
  72. # main
  73. GenFolder $shell.Namespace((Convert-Path .))
复制代码
批处理保存 ANSI 编码
微信:flashercs
QQ:49908356

TOP

哎呀 这么大的代码量  大佬 你站好了,我原地给你磕俩头,非常感谢你

TOP

回复 2# flashercs


    Win10下运行出错:
使用教程.mp4
Set-Content : 未能找到路径“D:\tmp\使用教程.mp4.log”的一部分。
所在位置 行:46 字符: 3
+   Set-Content -LiteralPath ($folderItem.Path + '.log') -Value $(
+   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (D:\tmp\使用教程.mp4.log:String) [Set-Content], DirectoryNotFoundException
    + FullyQualifiedErrorId : GetContentWriterDirectoryNotFoundError,Microsoft.PowerShell.Commands.SetContentCommand

TOP

回复 4# hfxiang


    文件夹不存在
微信:flashercs
QQ:49908356

TOP

给一个批处理+js混编版本》
   可将当前目录下(包括子目录)常见格式(*.mp4/mkv/avi/wmv)的视频文件简要信息汇总,输出文件是当前目录下的一个文本文件="影片简报"。将本脚本存盘到视频目录下运行,扩展名为.cmd。

/*&@cls
@echo off
dir/s/b/a-d *.mp4 *.wmv *.mkv *.avi>mF.lst
echo,... 在当前目录下生成 "影片简报" ...
(for /f "delims=" %%F in (mF.lst) do (
        for /f "delims=" %%v in ('cscript //e:jscript "%~f0" "%%~dpF" "%%~nxF" ') do (
                for /f "tokens=1-2 delims=," %%1 in ("%%~v") do (
                        echo,【影片名称】:%%~nF
                        echo,【影片格式】:%%~xF
                        echo,【影片大小】:%%1
                        echo,【影片时长】:%%2 )
        )
))>"影片简报"
(del/q mF.lst)&exit/b
*/
var argv = WScript.arguments;
var objShell = new ActiveXObject("shell.application");
var objFolder = objShell.NameSpace(argv.item(0));
var objFolderItem = objFolder.ParseName(argv.item(1));
var sizeF = objFolder.GetDetailsOf(objFolderItem, 1);
var durationF = objFolder.GetDetailsOf(objFolderItem, 27);
WScript.echo(sizeF+','+durationF);

TOP

返回列表