国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
如何根據(jù)文件的創(chuàng)建日期來(lái)重命名文件?

如何根據(jù)文件的創(chuàng)建日期來(lái)重命名文件?

問:

嗨,Scripting Guy!我的文件夾中包含一些日志文件。我想根據(jù)文件的創(chuàng)建日期來(lái)重命名每個(gè)文件;例如,如果文件是在 2004 年 12 月 1 日創(chuàng)建的,我想將其重命名為 20041201.log。我能做到嗎?

-- CK

答:

嗨,CK。聽著,如果說到腳本,就沒有什么是做不到的。(當(dāng)然了,人力所不能及的事情除外。)通常,在 WMI 腳本中很難解決日期問題,但就您說的問題而言,實(shí)際上,可以使用 WMI 日期格式輕松地 完成此項(xiàng)任務(wù)。

為了幫助說明是如何實(shí)現(xiàn)這一功能的,我們將此項(xiàng)任務(wù)分為兩個(gè)部分。首先,我們?nèi)绾瘟谐鑫募A中的所有文件及其創(chuàng)建日期?一種方法是使用類似下面的腳本:

strComputer = "."Set objWMIService = GetObject("winmgmts\\" & strComputer & "\root\cimv2")Set FileList = objWMIService.ExecQuery _("ASSOCIATORS OF {Win32_Directory.Name=‘C:\Logs‘} Where " _& "ResultClass = CIM_DataFile")For Each objFile In FileListWscript.Echo objFile.CreationDateNext

在此腳本中,我們綁定到 WMI 服務(wù),然后使用關(guān)聯(lián)查詢來(lái)返回文件夾 C:\Logs 中所有文件的集合。如果您不熟悉關(guān)聯(lián)查詢,切記它們具備的功能與其名字的含義大致相同:它們提供了一種將兩個(gè)單獨(dú) WMI 類關(guān)聯(lián)在一起的方法,此處為 Win32_Directory 和 CIM_DataFile。實(shí)際效果是,可使我們獲取關(guān)聯(lián)文件夾中所有文件的集合。

在獲取所有文件后,我們只需創(chuàng)建一個(gè) For-Each 循環(huán),然后回顯每個(gè)文件的“CreationDate”屬性值即可。因?yàn)?WMI 使用 UTC(通用時(shí)間協(xié)調(diào))格式,所以我們將獲取類似下面的值:

20041201202723.695209-480

不錯(cuò),看起來(lái)有點(diǎn)怪怪的,但您猜怎么樣:前八個(gè)字符恰巧對(duì)應(yīng)于年、月和日,這正是您要用作文件名的值。您想要得到類似于 20041201 的文件名嗎?看一下 UTC 日期中的前八個(gè)字符:20041201202723.695209-480。這正在您想到的東西。

事實(shí)上,要獲取文件名,我們只需使用 VBScript 的 Left 函數(shù)獲取 UTC 日期中的前八個(gè)字符即可。以下修改后的腳本提取前八個(gè)字符,將它們存儲(chǔ)在名為 strDate 的變量中,然后回顯 值:

strComputer = "."Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")Set FileList = objWMIService.ExecQuery _("ASSOCIATORS OF {Win32_Directory.Name=‘c:\Logs‘} Where " _& "ResultClass = CIM_DataFile")For Each objFile In FileListstrDate = Left(objFile.CreationDate, 8)Wscript.Echo strDateNext

第一步到此為止?,F(xiàn)在,我們開始介紹第二步,也是最后一步:重命名每個(gè)文件。讓我們看一下該腳本,然后再解釋它是如何工作的:

strComputer = "."Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")Set FileList = objWMIService.ExecQuery _("ASSOCIATORS OF {Win32_Directory.Name=‘C:\Logs‘} Where " _& "ResultClass = CIM_DataFile")For Each objFile In FileListstrDate = Left(objFile.CreationDate, 8)strNewName = objFile.Drive & objFile.Path & strDate & "." & "log"errResult = objFile.Rename(strNewName)Next

此處的難點(diǎn)是構(gòu)造新的文件名。在使用 WMI 重命名文件時(shí),不能只指定一個(gè)新名稱;例如,不能將文件“Wednesday.log”直接重命名為“20041201.log”。而是必須指定整個(gè)路徑并重命名文件“C:\Logs\20041201.log”。這就是下面這行代碼所完成的操作:

strNewName = objFile.Drive & objFile.Path & strDate & ".log"

我們此處所執(zhí)行的操作是將文件所在的驅(qū)動(dòng)器(“C:”)、該驅(qū)動(dòng)器上的文件夾路徑(“\Logs\”)、文件的新名稱(“20041201”)、變量 strDate 的值以及新文件的擴(kuò)展名(“.log”)合并在一起。將所有這些組合在一起,就會(huì)得到“C:\Logs\20041201.log”,這正是我們要為文件指定的完整路徑?,F(xiàn)在,我們只需調(diào)用 Rename 方法并更改文件名即可。

順便說一下,我們知道僅僅為重命名文件而必須提供完整路徑有一點(diǎn)怪怪的。如果說有什么好的一面的話,那就是可以使用這種相同的方法將文件移到另一個(gè)文件夾中。例如,假定您不僅想重命名文件,而且還想將它們移到名為 C:\Backups 的文件夾中。在這種情況下,可以使用類似下面的腳本,它將當(dāng)前文件路徑(“\Logs\”)替換為新的路徑(“\Backups\”)。運(yùn)行該腳本,這樣不僅會(huì)重命名文件,而且還會(huì)將文件移到 C:\Backups:

strComputer = "."Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")Set FileList = objWMIService.ExecQuery _("ASSOCIATORS OF {Win32_Directory.Name=‘C:\Logs‘} Where " _& "ResultClass = CIM_DataFile")For Each objFile In FileListstrDate = Left(objFile.CreationDate, 8)strNewName = objFile.Drive & "\Backups\" &  strDate & ".log"errResult = objFile.Rename(strNewName)Next

我們介紹的腳本存在的唯一問題是,如果文件具有相同的創(chuàng)建日期,它就會(huì)遇到麻煩了;畢竟,腳本將試圖創(chuàng)建兩個(gè)具有相同名稱的文件,例如,20041201.log,而文件系統(tǒng)不希望同一文件夾中包含兩個(gè)同名的文件。如果出現(xiàn)這種問題,可以使用以下示例腳本,它在實(shí)際重命名文件之前,先檢查文件名是不是唯一的。例如,假定文件夾中已包含一個(gè)名為 20041201.log 的文件。如果發(fā)生這種情況,此腳本(今天我們不會(huì)詳細(xì)介紹這個(gè)腳本)將創(chuàng)建一個(gè)新的文件名:20041201_2.log,并檢查 文件是否已存在。如果文件存在,則它嘗試命名為 20041201_3.vbs,然后繼續(xù)嘗試,直到創(chuàng)建一個(gè)唯一的名稱。此時(shí),它將重命名該文件:

strComputer = "."Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")Set FileList = objWMIService.ExecQuery _("ASSOCIATORS OF {Win32_Directory.Name=‘c:\Logs‘} Where " _& "ResultClass = CIM_DataFile")For Each objFile In FileListstrDate = Left(objFile.CreationDate, 8)strNewName = objFile.Drive & objFile.Path & _strDate & "." & "log"strNameCheck = Replace(strNewName, "\", "\\")i = 1Do While TrueSet colFiles = objWMIService.ExecQuery _("Select * from Cim_Datafile Where Name = ‘" & strNameCheck & "‘")If colFiles.Count = 0 ThenerrResult = objFile.Rename(strNewName)Exit DoElsei = i + 1strNewName = objFile.Drive & objFile.Path & _strDate & "_" & i & "." & "log"strNameCheck = Replace(strNewName, "\", "\\")End IfLoopNext

的確,有一點(diǎn)復(fù)雜,這就是為什么改日再介紹該腳本的原因。您也想休息一下,對(duì)吧?

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
windows日志的保護(hù)與偽造
通過組策略自動(dòng)給客戶機(jī)添加網(wǎng)絡(luò)打印機(jī)
腳本 Change the Drive Letter of a Volume
使用VBA,優(yōu)化處理Excel表格
vbs腳本大全,配有實(shí)例 DOS命令,批處理 腳本 代碼
使用腳本程序管理Windows網(wǎng)絡(luò) 第三部分:理解WMI
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服