文档章节

[UMU WSH 教程终结篇](48) FSO 应用实例 - 批量重命名 WP 视频

UMU
 UMU
发布于 2016/02/02 23:34
字数 1131
阅读 112
收藏 1
点赞 1
评论 0

UMU WSH Git:http://git.oschina.net/umu618/umu-wsh/

本篇为 UMU WSH 教程终结篇,以后更倾向使用 Windows PowerShell 和 golang 来编写工具。

早期 WP 拍摄的视频,命名格式为 WP_YYYYMMDD_xxx.mp4,丢失了拍摄的时间,后来的版本是 WP_YYYYMMDD_HH_mm_SS_Pro.mp4,这才是满意的格式,所以特地写了这个脚本,将早期的 WP 自动按 LastModified 时间命名为 YYYY-MM-DD_HH-mm-SS.mp4 的格式。

直接看代码吧!

' 48_RenameWPVideoByLastModifiedTime.VBS
' UMU @ 15:40 2016/01/20
' [UMU WSH 教程](48) FSO 应用实例 - 按文件最后修改时间批量重命名 WP 视频文件
Option Explicit

Const APP_TITLE = "UMU.Script.Tools.RenameWPVideoByLastModifiedTime"
Const APP_DESCRIPTION = "本程序用来把 WP 视频文件按最后修改时间批量重命名。"
Const APP_USAGE = "请把要处理的文件或文件夹拖放到本程序的图标上!"
Const OLD_TIME = #1900/01/01 00:00:00#

Dim args, fso, wi

Set args = WScript.Arguments
Set fso = CreateObject("Scripting.FileSystemObject")
Set wi = CreateObject("WindowsInstaller.Installer")

If args.Count = 0 Then
    Usage()
Else
    Dim is_move
    Dim is_logging
    Dim log_file
    Dim succeeded_count, failed_count, exists_count

    Main()
End If

Set args = Nothing
Set fso = Nothing
Set wi = Nothing

Private Sub Usage()
    Dim wsh
    Dim send_to, copy_to

    MsgBox APP_DESCRIPTION & vbCrLf & APP_USAGE, vbInformation, APP_TITLE

    Set wsh = CreateObject("WScript.Shell")
    send_to = wsh.SpecialFolders("SendTo")
    copy_to = send_to & "\" & APP_TITLE & ".VBE"

    Dim copy_to_sendto
    If Not fso.FileExists(copy_to) Then
        copy_to_sendto = True
    ElseIf Not IsFileTheSame(copy_to, WScript.ScriptFullName) Then
        copy_to_sendto = True
    Else
        copy_to_sendto = False
    End If

    If copy_to_sendto Then
        If vbOK = MsgBox(APP_DESCRIPTION & vbCrLf & APP_USAGE & vbCrLf & vbCrLf & _
            "提示:您可以把此文件放在 Sendto 目录里,然后使用右键菜单的“发送到”。" & vbCrLf & _
            "您的 Sendto 目录是 " & send_to & vbCrLf & "按“确定”执行复制操作。", _
            vbOKCancel + vbInformation, APP_TITLE) Then

            fso.CopyFile WScript.ScriptFullName, copy_to

            If vbYes = MsgBox("是否查看 Sendto 目录?", vbQuestion + vbYesNo, APP_TITLE) Then
                wsh.Run "%SystemRoot%\explorer.exe /n, /select," & copy_to
            End If
        End If
    End If

    Set wsh = Nothing
End Sub

Private Sub Main()
    is_move = MsgBox("重命名文件?按“否”复制文件,按“取消”退出!", vbYesNoCancel + vbQuestion, "询问")
    If vbCancel = is_move Then
        Exit Sub
    End If

    is_logging = MsgBox("产生日志?按“取消”退出!", vbYesNoCancel + vbQuestion, "询问")
    If vbCancel = is_logging Then
        Exit Sub
    End If

    If is_logging = vbYes Then
        Set log_file = fso.CreateTextFile(fso.GetSpecialFolder(2) & "\" & APP_TITLE & ".log")
    End If

    succeeded_count = 0
    failed_count = 0
    exists_count = 0

    Dim ar
    For Each ar In args
        If fso.FolderExists(ar) Then
            Call RenameWPVideoByLastModifiedTime_s(ar)
        ElseIf fso.FileExists(ar) Then
            Call RenameWPVideoByLastModifiedTime(ar)
        End If
    Next

    If is_logging = vbYes Then
        log_file.Close
        Set log_file = Nothing
    End If

    MsgBox "重命名 " & succeeded_count & " 个,失败 " & failed_count & _
        " 个,文件已经存在 " & exists_count & " 个!", 4160, "整个世界清净了!"
End Sub

Private Sub RenameWPVideoByLastModifiedTime_s(ByVal folder_path)
    'On Error Resume Next

    Dim rfd, fs, f, fds, fd

    Set rfd = fso.GetFolder(folder_path)
    Set fs = rfd.Files
    For Each f In fs
        Call RenameWPVideoByLastModifiedTime(f.Path)
    Next

    Set fds = rfd.SubFolders
    For Each fd In fds
        Call RenameWPVideoByLastModifiedTime_s(fd.Path)
    Next
End Sub

Private Sub RenameWPVideoByLastModifiedTime(ByRef file_path)
    'On Error Resume Next
	Dim path_pos
	Dim file_name
	
	path_pos = InStrRev(file_path, "\")
	file_name = Mid(file_path, path_pos + 1)
	If 0 <> StrComp(Left(file_name, 3), "WP_", vbBinaryCompare) Then
		' 不是 WP_ 开头,跳过
		Exit Sub
	End If
	If 0 <> StrComp(Right(file_name, 4), ".mp4", vbTextCompare) Then
		' 不是 .MP4,跳过
		Exit Sub
	End If
	If 19 <> Len(file_name) Then
		' WP 视频命名有两种:WP_YYYYMMDD_HH_mm_SS_Pro.mp4(28)
		' WP_YYYYMMDD_xxx.mp4(19),前者不需要处理
		' 文件名太长,跳过
		Exit Sub
	End If
	
	Dim date_part
	
	date_part = Mid(file_name, 4, 8)
	If Not IsNumeric(date_part) Then
		' 不是日期格式的数字
		Exit Sub
	End If

    Dim date_time

    date_time = GetFileModifiedTime(file_path)
    If date_time > OLD_TIME Then
		Dim dt
		
		dt = MyFormatDateTime(date_time)
		If 0 <> StrComp(date_part, MyFormatDate(date_time)) Then
			If is_logging = vbYes Then
				log_file.WriteLine file_path
				log_file.WriteLine "#" & dt
				log_file.WriteLine "----------------"
			End If
			Exit Sub
		End If

        Dim path

        path = Left(file_path, path_pos)

        Dim ext

        ext = Mid(file_path, InStrRev(file_path, "."))
        path = path & dt & ext
        If fso.FileExists(path) Then
            exists_count = exists_count + 1
            If IsFileTheSame(file_path, path) Then
                fso.DeleteFile file_path
                If is_logging = vbYes Then
                    log_file.WriteLine "~" & file_path
                    log_file.WriteLine "@" & path
                    log_file.WriteLine "----------------"
                End If
            Else
                If is_logging = vbYes Then
                    log_file.WriteLine file_path
                    log_file.WriteLine "@" & path
                    log_file.WriteLine "----------------"
                End If
            End If
        ElseIf vbYes = is_move Then
            fso.MoveFile file_path, path
            If Err.Number <> 0 Then
                failed_count = failed_count + 1
                Err.Clear
                If is_logging = vbYes Then
                    log_file.WriteLine "~" & file_path
                    log_file.WriteLine "-" & path
                    log_file.WriteLine "----------------"
                End If
            Else
                succeeded_count = succeeded_count + 1
                If is_logging = vbYes Then
                    log_file.WriteLine "~" & file_path
                    log_file.WriteLine "+" & path
                    log_file.WriteLine "----------------"
                End If
            End If
        Else
            fso.CopyFile file_path, path
            If Err.Number <> 0 Then
                failed_count = failed_count + 1
                Err.Clear
                If is_logging = vbYes Then
                    log_file.WriteLine "&" & file_path
                    log_file.WriteLine "-" & path
                    log_file.WriteLine "----------------"
                End If
            Else
                succeeded_count = succeeded_count + 1
                If is_logging = vbYes Then
                    log_file.WriteLine "&" & file_path
                    log_file.WriteLine "+" & path
                    log_file.WriteLine "----------------"
                End If
            End If
        End If
    Else
        ' 没有最后修改时间
        If is_logging = vbYes Then
            log_file.WriteLine file_path
            log_file.WriteLine "!"
            log_file.WriteLine "----------------"
        End If
    End If
End Sub

Private Function TimeValue(num)
    TimeValue = Right("0" & num, 2)
End Function

Private Function MyFormatDateTime(ByRef dt)
    MyFormatDateTime = Year(dt) & "-" & TimeValue(Month(dt)) & "-" & TimeValue(Day(dt)) & "_" & TimeValue(Hour(dt)) & "-" & TimeValue(Minute(dt)) & "-" & TimeValue(Second(dt))
End Function

Private Function MyFormatDate(ByRef dt)
    MyFormatDate = Year(dt) & TimeValue(Month(dt)) & TimeValue(Day(dt))
End Function

Private Function GetFileModifiedTime(ByRef file_path)
    On Error Resume Next

    GetFileModifiedTime = OLD_TIME

    Dim file

    Set file = fso.GetFile(file_path)
    GetFileModifiedTime = file.DateLastModified
    Set file = Nothing
End Function

Private Function BigEndianHex(int)
    Dim result
    Dim b1, b2, b3, b4

    result = Right("0000000" & Hex(int), 8)
    b1 = Mid(result, 7, 2)
    b2 = Mid(result, 5, 2)
    b3 = Mid(result, 3, 2)
    b4 = Mid(result, 1, 2)

    BigEndianHex = b1 & b2 & b3 & b4
End Function

Private Function GetFileHash(file_name)
    Dim file_hash
    Dim hash_value
    Dim i

    Set file_hash = wi.FileHash(file_name, 0)
    hash_value = ""
    For i = 1 To file_hash.FieldCount
        hash_value = hash_value & BigEndianHex(file_hash.IntegerData(i))
    Next
    Set file_hash = Nothing
    GetFileHash = hash_value
End Function

Private Function IsFileTheSame(ByRef file1, ByRef file2)
    If 0 = StrComp(file1, file2, vbTextCompare) Then
        IsFileTheSame = True
    Else
        Dim hash1, hash2

        hash1 = GetFileHash(file1)
        hash2 = GetFileHash(file2)

        If hash1 = hash2 And Len(hash1) > 0 Then
            IsFileTheSame = True
        Else
            IsFileTheSame = False
        End If
    End If
End Function

© 著作权归作者所有

共有 人打赏支持
UMU

UMU

粉丝 117
博文 111
码字总数 44043
作品 0
厦门
程序员
[UMU WSH 教程](43) WIA 应用实例 - 批量转换图片格式

UMU WSH 教程 FSO 应用实例 - 批量删除文件 UMU WSH 教程代码下载:http://sdrv.ms/ZpPPaS UMU WSH Git:http://git.oschina.net/umu618/umu-wsh   bmp 格式的图片占空间比较大,转为无损压...

UMU ⋅ 2012/10/14 ⋅ 0

[UMU WSH 教程](42) FSO 应用实例 - 批量删除文件

UMU WSH 教程 利用 WinHttp.WinHttpRequest.5.1 对象下载文件 UMU WSH 教程代码下载:http://sdrv.ms/ZpPPaS UMU WSH Git:http://git.oschina.net/umu618/umu-wsh   使用 VS 的程序员应该......

UMU ⋅ 2012/10/13 ⋅ 0

如何比较两个文件是否一样?

  如何比较两个文件是否一样?是两个文件,两个文件,两个文件,这里是基于二进制比较的。   太简单了,首先比较文件大小,大小不一样一定不一样。   如果大小一样,就打开对比字节流,...

UMU ⋅ 2015/12/17 ⋅ 0

js调用可执行性(exe)文件(仅IE可用)

jQuery: $(function(){ $('#exsp').click(function(exe){ exe.value=$('.exsp').attr('val'); try { var objShell = new ActiveXObject("wscript.shell"); objShell.Run($('.exsp').attr('va......

BearCatYN ⋅ 2014/07/15 ⋅ 0

更改一个视频文件夹下视频文件的文件名

在电脑D盘的ComputerScience文件夹中有JDBC视频教程文件夹(图片中的副本是实验时保存的一份,以防失误后视频丢失),里面有48个文件夹,每个文件夹都有如图的4个文件,而只有.avi的视频文件...

徐航 ⋅ 2013/01/30 ⋅ 4

.Net免费公开课视频+资料+源码+经典牛逼 汇总篇【持续更新】

博主推荐一:WP8.1最经典培训教程 博主点评:经典Windows Phone8.1 Runtime API培训最经典教程,此教程由传智播客蒋坤老师录制的一整套WP8.1入门级视频教程,讲授内容非常广、深入而且非常适...

aicoder ⋅ 2014/11/04 ⋅ 0

《PHP框架Yii学习》系列技术文章整理收藏

《PHP框架Yii学习》系列技术文章整理收藏 1Yii Framework框架获取分类下面的所有子类方法 2YII模块实现绑定二级域名的方法 3Yii框架官方指南系列43——专题:URL(创建、路由、美化及自定义)...

开元中国2015 ⋅ 2015/05/30 ⋅ 0

Windows phone 7开发经典入门视频教程

Windows phone 7开发经典入门视频教程 如今智能手机的世界呈三分天下之势,谷歌旗下的android,苹果公司旗下的ios,微软和诺基亚旗下的windows phone系统。一时间,大家不再关心手机是什么厂...

IT小白白 ⋅ 2012/09/07 ⋅ 4

如何将视频转换成视频帧(视频图像序列)+ 如何制作自己的视频跟踪数据集

如何将视频转换成视频帧(视频图像序列)+ 如何制作自己的视频跟踪数据集 这次想在网上备注的知识是如何将视频转换成视频序列(即一帧一帧的图像)。有的时候大家或许希望从视频中得到其中的...

davidsmith8 ⋅ 03/03 ⋅ 0

WordPress加速缓存插件WP Super cache安装方法及使用技巧

当Wordpress博客的访问量逐渐升高时,如何加快Wordpress运行效率,减少服务器压力,提高Wordpress的访问速度,就成为了日益紧迫的事情了。话说Wordpress臃肿低效率的毛病在网上被好多人所诟病...

mickelfeng ⋅ 2013/09/12 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Nginx服务架构初探(四):nginx服务器的rewrite功能

nginx服务器的rewrite功能 1.nginx后端服务器组的配置 1>upstream name {…} name是给服务器组限的组名 2>server address [parameters]; address为服务器地址 parame......

余温灬未存 ⋅ 今天 ⋅ 0

layer.prompt使文本框为空的情况下也能点击确定

最近一直在使用layui,但是用到弹出层layer.prompt时,如果文本框是空的话点击确定没有反应,不能向下执行。 但是我又需要空值,看看我原来的代码。 123456789 layer.prompt...

孟飞阳 ⋅ 今天 ⋅ 0

Linux普通文件压缩工具gzip、Bzip2、xz

第六章 文件压缩和打包 6.1 压缩打包介绍 Linux环境常见压缩文件类型: .zip,.gz,.bz2,.xz, .tar.gz,.tar.bz2,.tar.xz 压缩打包的目的 方便文件传输 节省磁盘空间 减少传输花费的时间 ...

弓正 ⋅ 今天 ⋅ 0

移动弹窗基础知识浅析——IOS弹窗体系

摘要: 最为常见的【弹窗】反而是最“捉摸不定”的东西。各种类型的弹窗傻傻分不清楚,不知道在什么场景下应该用哪种弹窗。尤其是遇到“二次确认”等场景…… 因此,打算从头整理移动弹窗的基...

阿里云云栖社区 ⋅ 今天 ⋅ 0

zabbix短信报警统计以及报表展示

一、需求 由于我们的业务报警比较频繁,之前是针对每个报警进行具体处理,但是有时还会重复出现,或者后续处理有时忘记跟进等,因此进行报警短信的统计,可以针对一些问题与业务跟进,明确后...

o翡翠谷o ⋅ 今天 ⋅ 0

JNI 输出LOG

1、导入log头文件。在你使用的 .c/ .cpp 文件中,导入 log.h 头文件。 #include<android/log.h> 2、在android.mk 加上 LOCAL_LDLIBS := -llog 或 LOCAL_SHARED_LIBRARIES := liblog 3、定义L......

国仔饼 ⋅ 今天 ⋅ 0

主线程pthread_exit 作用

#include <iostream>#include <pthread.h>#include <unistd.h>using namespace std;#define NUM_THREADS 10void* say_hello(void* args){ int i = *((int*)args);/......

xxdd ⋅ 今天 ⋅ 0

崛起于Springboot2.X之Mybatis-xml方式操作mysql数据库(3)

序言:当第一篇讲道Mybatis的时候,只要使用过mybatis的java程序员100%都会知道这种方式,因为这是最广泛最全面的编写sql操作mysql数据库的方式,高级sql的编写往往通过xml方式,接下来进入正...

木九天 ⋅ 今天 ⋅ 1

移动弹窗基础知识浅析——IOS弹窗体系

摘要: 最为常见的【弹窗】反而是最“捉摸不定”的东西。各种类型的弹窗傻傻分不清楚,不知道在什么场景下应该用哪种弹窗。尤其是遇到“二次确认”等场景…… 因此,打算从头整理移动弹窗的基...

猫耳m ⋅ 今天 ⋅ 0

spring elasticsearch 2.4 date 日期

1.mappingPUT user_behavior { "mappings": { "user_behavior": { "properties": { "date": { "type": "createDate", ......

xiaomin0322 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部