嗨,Scripting Guy!可以使用腳本重命名一個(gè)目錄中的所有文件并在原文件名上添加“pl-”前綴嗎?
-- JP
嗨,JP。了解有多少人需要做類(lèi)似的事情很有趣:他們需要通過(guò)添加日期,更改文件擴展名,或者——如本例中——在每個(gè)文件名的開(kāi)頭打上“pl-”前綴,重命名給定文件夾中的所有文件。永遠都不要說(shuō) Script Guys 不傾聽(tīng) Microsoft 客戶(hù)的心聲。(不是這樣的,我們就是不想人有說(shuō)這句話(huà)?。┻@里有一個(gè)腳本可以實(shí)現您想完成的事情:
strComputer = "."Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")Set colFileList = objWMIService.ExecQuery _("ASSOCIATORS OF {Win32_Directory.Name=‘C:\Logs‘} Where " _& "ResultClass = CIM_DataFile")For Each objFile In colFileListstrNewName = objFile.Drive & objFile.Path & "pl-" & _objFile.FileName & "." & objFile.ExtensionerrResult = objFile.Rename(strNewName)Next如果您打算根據自己的需求來(lái)修改這個(gè)腳本,那么需要記住兩個(gè)要點(diǎn)。首先,請注意我們使用了 Associators Of 查詢(xún)以便返回在某個(gè)文件夾(此處為 C:\Logs 文件夾)中找到的所有文件的集合:
Set colFileList = objWMIService.ExecQuery _("ASSOCIATORS OF {Win32_Directory.Name=‘C:\Logs‘} Where " _& "ResultClass = CIM_DataFile")Associators Of 查詢(xún)的確名副其實(shí):它使您可以關(guān)聯(lián)兩個(gè) WMI 類(lèi)別。此處,我們將 Win32_Directory(讓我們管理文件夾的類(lèi)別)與 CIM_DataFile(讓我們管理文件的類(lèi)別)相關(guān)聯(lián)。您可能會(huì )想到 Win32_Directory 類(lèi)別有一個(gè)名為“Files”的屬性(可列出在文件夾中找到的所有文件)。但是出于某種原因,并沒(méi)有該屬性。必須使用 Associators Of 查詢(xún)來(lái)獲得相同的效果。
正如您可能希望的那樣,有關(guān) Associators Of 的全面討論永遠都不會(huì )出現在這個(gè)小專(zhuān)欄中。如需更多信息,請參見(jiàn)WMI SDK. 目前,只要照搬代碼就行了,并且——如果需要的話(huà)——將 C:\Logs 更改為適當的文件夾。
需要記住的另一點(diǎn)是:使用 WMI 重命名文件時(shí),必須將整個(gè)文件路徑傳遞給 Rename 方法。假設您要將文件 C:\Logs\File_1.txt 重命名為 C:\Logs\Pl-File_1.txt。這行代碼辦不到這一點(diǎn):
errResult = objFile.Rename("Pl-File_1.txt")必須使用這行代碼:
errResult = objFile.Rename("C:\Logs\Pl-File_1.txt")這就是 Rename 方法之前的代碼為何看起來(lái)如此復雜的原因:必須為新的文件名構建整個(gè)路徑,將其指派給 strNewName 變量,然后將 strNewName 傳遞給 Rename 方法。該代碼可分為:
| objFile.Drive | 對所要重命名的文件返回驅動(dòng)器號(這里為 C:\)。 |
| objFile.Path | 不要讓這個(gè)名稱(chēng)誤導了您:Path 屬性?xún)H返回文件夾的路徑(驅動(dòng)器和文件名除外)。例如,如果連接到文件 C:\Logs\File1_txt,那么 Path 屬性將返回 Logs\。如果連接到了 C:\Scripts\Logs\Admin Logs\File_1.txt,那么 Path 將為 Scripts\Logs\Admin Logs\。 |
| "pl-" | 要附加到每個(gè)文件名前頭的前綴。 |
| objFile.FileName | 文件的當前名稱(chēng),不含文件擴展名(這里為 File_1)。 |
| "." | 文件名和文件擴展名間的英文句號。Extension 屬性(見(jiàn)下方)僅返回文件擴展名(比如:txt)中所含的字符;當不返回英文句號。 |
| objFile.Extension | 文件的擴展名。假設我們要將所有這些文件的 .txt 擴展名更改為 .log 擴展名。這時(shí),不需要使用現有的文件擴展名,而將 .log 附加到文件名的末尾。 |
換而言之:
| objFile.Drive | C:\ |
| objFile.PathLogs\ | "pl-" |
| pl- |
|
| objFile.FileName | File_1 |
| "." | . |
| objFile.Extension | txt |
將它們連在一塊——C:\ + Logs\ + pl- + File_1 + .+ txt——就將得到新的文件名。
聯(lián)系客服