标题: [其他] 【已解决】批量提取视频文件名和时长和大小 [打印本页]
作者: 285050551 时间: 2022-7-14 01:24 标题: 【已解决】批量提取视频文件名和时长和大小
本帖最后由 285050551 于 2022-7-14 14:28 编辑
格式如下,每个目录里面都拥有一个.MP4的视频 格式是固定的MP4 其中影片的大小用GB或者MB表示 提取出来时候自动加上下面的内容,不是单独列出来参数
【影片名称】:
【影片格式】:MP4
【影片大小】:
【影片时间】:
【影片截图】:
作者: flashercs 时间: 2022-7-14 13:33
- <#*,:&cls
- @echo off
- cd /d "%~dp0"
- powershell -C "Set-Location -LiteralPath ([Environment]::CurrentDirectory);. ([ScriptBlock]::Create((Get-Content -LiteralPath \"%~f0\" -ReadCount 0 | Out-String)))"
- pause
- exit /b
- #>
- # 获取当前目录及子目录的MP4视频信息,保存到 .mp4.log
- $conVideoSearchPattern = "*.mp4" #'视频类型
- $conRECURSE = $true #' 是否遍历子目录
- # ' shell content filter enum
- $SHCONTF_CHECKING_FOR_CHILDREN = 0x00010
- $SHCONTF_FOLDERS = 0x00020
- $SHCONTF_NONFOLDERS = 0x00040
- $SHCONTF_INCLUDEHIDDEN = 0x00080
- $SHCONTF_INIT_ON_FIRST_NEXT = 0x00100
- $SHCONTF_NETPRINTERSRCH = 0x00200
- $SHCONTF_SHAREABLE = 0x00400
- $SHCONTF_STORAGE = 0x00800
- $SHCONTF_NAVIGATION_ENUM = 0x01000
- $SHCONTF_FASTITEMS = 0x02000
- $SHCONTF_FLATLIST = 0x04000
- $SHCONTF_ENABLE_ASYNC = 0x08000
- $SHCONTF_INCLUDESUPERHIDDEN = 0x10000
-
- $shell = New-Object -ComObject Shell.Application
- function Format-FileSize {
- # output: string
- param (
- [long]$FileSize
- )
- switch ($FileSize) {
- { $_ -lt 1KB } { return "{0}Bytes" -f $_ }
- { $_ -lt 1MB } { return "{0:F2}KB" -f ($_ / 1KB) }
- { $_ -lt 1GB } { return "{0:F2}MB" -f ($_ / 1MB) }
- { $_ -lt 1TB } { return "{0:F2}GB" -f ($_ / 1GB) }
- { $_ -lt 1PB } { return "{0:F2}TB" -f ($_ / 1TB) }
- Default { return "{0:F1}PB" -f ($_ / 1PB) }
- }
- }
- function GenFolderItem {
- param (
- $folderItem
- )
- Write-Host $folderItem.Name
- Set-Content -LiteralPath ($folderItem.Path + '.log') -Value $(
- '【影片名称】:{0}' -f $folderItem.Name
- '【影片格式】: MP4'
- '【影片大小】:{0}' -f (Format-FileSize $folderItem.Size)
- '【影片时间】:{0}' -f ([timespan]::FromTicks($folderItem.ExtendedProperty("System.Media.Duration")))
- '【影片截图】:'
- )
- }
- function GenFolder {
- param (
- $shellFolder
- )
- if ($null -eq $shellFolder -or [convert]::IsDBNull($shellFolder)) {
- return
- }
- $folderItems = $shellFolder.Items()
- $null = $folderItems.Filter($SHCONTF_NONFOLDERS -bor $SHCONTF_INCLUDEHIDDEN -bor $SHCONTF_INCLUDESUPERHIDDEN, $conVideoSearchPattern)
- foreach ($folderItem in $folderItems) {
- GenFolderItem $folderItem
- }
- if ($conRECURSE) {
- $null = $folderItems.Filter($SHCONTF_FOLDERS -bor $SHCONTF_INCLUDEHIDDEN -bor $SHCONTF_INCLUDESUPERHIDDEN, "*.*")
- foreach ($folderItem in $folderItems) {
- GenFolder $folderItem.GetFolder()
- }
- }
- }
- # main
- GenFolder $shell.Namespace((Convert-Path .))
复制代码
批处理保存 ANSI 编码
作者: 285050551 时间: 2022-7-14 13:44
哎呀 这么大的代码量 大佬 你站好了,我原地给你磕俩头,非常感谢你
作者: hfxiang 时间: 2022-7-14 15:32
回复 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
作者: flashercs 时间: 2022-7-14 17:36
回复 4# hfxiang
文件夹不存在
作者: aloha20200628 时间: 2022-7-14 22:58
本帖最后由 aloha20200628 于 2024-6-19 11:10 编辑
给一个批处理+js混编版本》
可将当前目录下(包括子目录)常见格式(*.mp4/mkv/avi/wmv)的视频文件简要信息汇总,输出文件是当前目录下的一个文本文件="影片简报"。将本脚本存盘到视频目录下运行,扩展名为.cmd。- @set @x=1 /* &@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 /nologo /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)&pause&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);
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |