




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
OVBS腳本運行庫手冊之一一一磁盤操作
文件系統(tǒng)管理是系統(tǒng)管理的一個關鍵性任務。WSII和VB腳本在這個領域都沒有提供相關的
功能。幸運的是,你可以通過scriptruntime
庫來管理這些關鍵的系統(tǒng)組件,比如磁盤,文件夾和文件。這詼種主要的腳本語言,VB腳本
語言和JS腳本語言起初的時候都是設計給客戶端來編寫IE的。正是因為如此,這兩個腳
本語言都有一些局限性。例如VB腳本和JS腳本內(nèi)部都沒有提供訪問文件管理的一些任務,
比如:復制、移動、刪除文件等。這樣做的目的是為了保護消費者。大多數(shù)的的網(wǎng)站不可能
讓用戶通過網(wǎng)頁去刪除它們硬盤:上的東西。盡管如此,腳木已經(jīng)從類似的HTML的按鈕之類
的開始迅速的發(fā)展了。隨著ASP的到來,瀏覽器的編寫者要求在server上管理文件。而隨
著WSH的到來,系統(tǒng)管理員要求有在web瀏覽器外來管理文件了。
為了滿足這個要求,微軟發(fā)布的了ScriptRuntimeLibrab。它是一個單獨的DLL文
件,scrrun.dll文件,用來給腳本的編寫者們提供一些文件管理的能力,包括以下內(nèi)容:
1、獲取文件系統(tǒng)的信息,包括獲得磁盤、文件和文件夾上的信息。
2、史制,移動和刪除文件及文件夾
3、創(chuàng)建和讀寫文本文件。
除了這些功能之外,ScriptRuntimeLibrary提供了創(chuàng)建字典的能力。也可以用來對腳本進
行編譯,使腳本成為加密的。
Note:
這章只是討論FileSystemObJect和Dictionary的部分,對于Encode部分不作討論,
ScriptRuntimeLibrary
也是windows2000的一部分,它在你安裝或者升級微軟的應用程序的時候也隨著升級和安
裝了:這些應用程序有以下幾個:
1、NSH2、VB腳本3、IE瀏覽器4、MicrosoftOffice5、FileSystemObject
正如它的名字一樣,F(xiàn)SO設計用來幫助你管理文件系統(tǒng),F(xiàn)SO
介許你獲取重要的文件組件信息,包括硬盤、文件夾、文件:也提供一般的系統(tǒng)管理的任務,
比如復制、刪除、移動文件和文件夾。此外FSO允許你讀寫文本文件。
用FSO其實有些用詞不當,因為實際上FSO包含很多個對象,每個對象被設計成用來完成
特定的目的。組成FSO
的對象列在了下表中:
Drive代表系統(tǒng)中磁盤或者磁盤的集合
File代表系統(tǒng)中的一個文件或者文件的集合
Folder代表文件系統(tǒng)中的一個文件夾或者多個文件夾
Textstream代表文本文件中的讀取、寫入或者提交字符串
派磁盤管理
磁盤管理是系統(tǒng)管理的一個重要的部分。作為一個系統(tǒng)管理員,知道安裝在這個計算機上磁
盤是十分重要的,當然,知道這個磁盤的屬性、磁盤類型、子盤大小、總共和剩余空間也是
同等重要的。作為一個腳本的編寫者,你有兩個主要的選擇來管理磁盤:NM1
&FS0。一般來講,WM!更是管理磁盤的首選項,主要有以下幾個原因:1、WMI能返回一些
FSO無法返回的屬性,比如磁道、扇面等。
2、FSO不能返回一個目標磁盤。而是返回所有的磁盤,然后進行篩選出你感興趣的磁盤。而
你可以用WM1通過磁盤符號及返回特定的磁盤,WMI可以用來返回遠程計免機上磁盤的信
息,但是FS0不可以,除非它用wshconlrollcr對象。
雖然WMI或許是獲得磁盤信息的最好工具。但是這里至少有兩個原因使你必須去熟悉FSOo
第一:因為有些低端的操作系統(tǒng)無法安裝WMI,所以只能使用FSO;
第二:最重要的一點是因為:腳本的編寫者們在想到獲取磁盤信息的時候就會用到FSO,而
你作為系統(tǒng)管理員,可能會來存其它人的腳本,這樣就需要了解FSO.注:外國人寫的真是
拗口,我理解這句話的意思就是說FSO比WMI應用的更廣泛一些。
X如何返回磁盤信息
在你管理計算機的磁盤之前,你需要知道你的計算機上實際上有多少磁盤可以使用。FSO允
許你管理安裝在計算機上的所有磁盤,包括移動硬盤和網(wǎng)絡硬盤(就是只要是有盤符的就可
以了)為了返回這個集合,你需要首先創(chuàng)建一個FSO實例,然后創(chuàng)建磁盤屬性的對象。當這
個集合返回后,你可用一個ForEach的循環(huán)來重述這個集合。
例如,下面的腳本就是要返回安裝在本地計舞機上的磁盤集合然后返回它們的盤符:
1SetobjFSO=CreateObject("Scripting.FileSystemObject")
2SetcolDrives=objFSO.Drives
3ForEachobjDrivcincolDrives
4Wscript.Echo“Driveletter:"&objDrive.DriveLetter
5Next
※如何綁定指定磁盤
如果你事先知道要綁定的磁盤(例如C盤或?個共享文件夾\\accounting\receivables),
你可以用GetDrive
的方法來直接綁定磁盤。這樣你可以不用去篩選就獲得特定磁盤的信息。GetDrive需要一個
單獨的參數(shù):磁盤符號或者是共享文件夾的UNC路徑。你可以用如下的幾種格式:CC:
C:\
在下面的腳本中首先創(chuàng)建一個FSO對象,然后用GetDrive的方法來直接綁定C盤,然后回
顯可用的磁盤空間:
1SetobjFSO=CreateObject(*Scripting.FileSystemObject*)
2SetobjDrive=objFSO.GetDrive("C:")
3Wscript.Echo"Availablespace:"&objDrive.AvailableSpace
注意,這里沒有ForEach
循環(huán),你就可以獲得磁盤的屬性。因為腳本是返回?個單獨的磁盤對象,而不是所有對象的
集合。因此也就不用篩選了。
※如何列舉磁盤驅動器的屬性
磁盤集合的作用總是用來監(jiān)視和列舉的。作為一個系統(tǒng)管理員,你需要知道計算機上的可用
磁盤,也需要知道磁盤的序列號、可用空間等信息。在你獲得當前磁盤的集合或者單個磁盤
的時候,你就可以獲得下表列出的所有屬性。
1、AvailableSpace---報告磁盤上可以使用的空間,單位是bytes。如果想以kb為單位返
回,除以1024,如果想以M為單位返回,則除以
1.048,576。這個屬性返回的是可用的磁盤空間的總數(shù)。如果?個磁盤啟用了磁盤限額,那么
他返回的數(shù)字可能比實際的要小。
2.DriveLette一一返回特定磁盤的盤符。這個盤符不包含那么冒號。例如軟盤返回的是A,
而不是A:
3.DriveType一一整數(shù)的值代表不同的磁盤類型:1:移動硬盤2:硬盤3:網(wǎng)絡硬盤
4:CD-ROM5:RAM磁盤
4.FrccSpace一一返回磁盤剩余空間的總額。單位是bytes,如果是返回的單位是kb,就除
以1024,如果是以M為單位,除以
1,048,576?注意:這個和磁盤可用空間不一樣,剩余的磁盤空間不會考慮磁盤限額。
5、FileSystem——返回文件系統(tǒng)的類型(FAT,FAT32,NTFS)
6.IsReady一一標識磁盤是否可以訪問。這個值來判斷軟盤和CD-ROM是否為空
7.Path一一磁盤路徑。對于本地磁盤,返回盤符和脫尾符(就是那個冒號),比如A:對于
網(wǎng)絡磁盤,就返回它的UNC路徑。
8、RootFolder---返回磁盤根目錄下的文件夾。
9、SerialNumber一一磁盤的生產(chǎn)商給磁盤分配的序列號。對丁?軟盤和網(wǎng)絡硬盤來說,它們的
值是0。
10、ShareName---分配給網(wǎng)絡驅動去的共享名稱。
11、TotalSize一一報告整個的磁盤空間,單位是bytes,如果想以kb為單位,除以1024,
如果想以M為單位返回,則單位為1,048,576。
12、VolumeName---分配給磁盤的卷名。
為了列舉安裝在計算機里的磁盤的屬性,創(chuàng)建一個FSO實例,然后創(chuàng)建一個FSO屬性的對
象,用ForEach循環(huán),來重現(xiàn)各個磁盤的配置。對于集合當中的每個磁盤,你可以返回一
個或者的屬性。如下列腳本列舉出安裝在計算機上所有磁盤的所有屬性。
1SetobjFSO=CreateObject("Scripting.FileSystemObject")
2SetcolDrives=objFSO.Drives
3EorEachobjDriveincolDrives
4Wscript.Echo“Availablespace:"&objDrive..AvailableSpace
5Wscript.Echo“Driveletter:"&objDrive.DriveLetter
6Wscript.Echo"Drivetype:"&objDrive.DriveType
7Wscript.Echo"Filesystem:"&objDrive.FileSystem
8Wscript.Echo“Isready:"&objDrive.IsReady
9Wscript.Echo"Paih:"&objDrive.Path
10Wscript.Echo"Rootfolder:"&objDrive.RootFolder
11Wscript.Echo"Serialnumber:"&objDrive.SerialNumber
12Wscript.Echo“Sharename:"&objDrive.ShareNamc
13Wscript.Echo"Totalsize:"&objDrive.TotalSize
14Wscript.Echo“Volumename:"&objDrive.VolumeName
15Next
上述腳本有個潛在的缺點,就是如果沒有軟盤或者光驅里面沒有光盤,會產(chǎn)生一個disknot
ready的錯誤出來。當磁盤沒有準備好的時候用FS0來訪問會有些錯誤的。雖然FS0可以
標識那些沒有準備好的磁盤,但是你訪問它的一些屬性的時候會報錯出來,比如
AvailableSpace或FreeSpaceo如果磁盤沒有準備好,你只可以訪問如下的四個屬性:
DriveLetter,DriveType,IsReady、ShareName。所有嘗試訪問其它屬性都會報錯。
幸運的是,IsReady屬性允許你用腳本來檢查一個磁盤是否準備好了。IsReady返回一個
Boolean值,如果這個值是true,則磁盤準好了,你可以訪問它的所有屬性,否則如果這個
值是false,則磁盤沒有準備好,只能返回上面的四個屬性了??梢詫γ總€磁盤,用IsReady
屬性來保證磁盤是準備好的。如果是就返回磁盤的盤符和剩余空間,如果不是就只返回磁盤
的盤符。
1SetobjESO=CreateObject(,zScripting.FileSystemObjectz,)
2SetcolDrives=objFSO.Drives
3ForEachobjDriveincolDrives
4IfobjDrive.IsReady=TrueThen
5Wscript.Echo“Driveletter:"&objDrive.DriveLetter
6Wscript.Echo“Freespace:"&objDrive.FreeSpace
7Else
8Wscript.Echo“Driveletter:"&objDrive.DriveLetter
9EndIf
10Next
Note:這個問題不會發(fā)生在Will上(如果軟盤或者光驅中沒有盤,腳本就會失?。?,WMI只
是認為返回的空間為Null..
?VBS腳本運行庫手冊之二一一管理文件夾
※管理文件夾
磁盤的屬性比如磁盤的剩余空司,磁盤的總額提供了一個全局的信息給系統(tǒng)管理員。但是,
對于系統(tǒng)管理而言,磁盤的信息雖然是必須的,但是還不夠。知道文件存儲在哪個盤固然重
要,但是你也需要知道文件是存儲在哪個文件夾下的。此外許多的系統(tǒng)管理任務都是發(fā)生在
文件夾級別的,比如復制,移動,刪除和列舉文件夾的內(nèi)容。
FS0可以返回一個磁盤上文件夾的全部信息。此外,F(xiàn)S0提供了一系列的方法來完成諸如:
復制、移動、刪除文件夾的操作。
X如何綁定指定的文件夾
在微軟的調(diào)用文件中,文件夾是COM
對象。這就是說在你訪問一個單獨的文件夾的屬性時,你必須去創(chuàng)建一個文件夾的對象
reference,這個過程叫做綁定。你可以用FSO和GetObject的方法來綁定到一個文件夾。
當用GetFolder的時候,你必須:路徑既可以寫成本地路徑也可以寫成UNC路徑(例如:
\\accounting\receivables)o但是通配符不能出現(xiàn)在路徑當中,此外,你不可以創(chuàng)建一個單
獨的對象reference
來同時綁定到多個文件夾。例如,如下的腳本代碼會產(chǎn)生一個錯誤:
objFSO.GetFolder("C:\FSO","C:\Scripts")
如果你想針對多個文件夾同時工作,你要么用BII或者用針對每個文件夾創(chuàng)建單獨的對象
referenceo
在設置的時候Set這個關鍵詞是必須的,因為你要標識這個對象reference變量。
例如下面的腳本綁定文件夾C:\FSO
1SetobjESO=CreateObject(*Scripting.FileSystemObject*)
2SetobjFolder=objFSO.GetFolder(*C:\FSO*)
雖然通配符是不允許的,但是你可以用點來關聯(lián)到當前的文件夾(.),你可以用點點(..)來綁
定到父文件夾,用\
綁定到根文件夾。例如如下代碼語句綁定到當前的文件夾:
SetobjFolder=objFSO.GetFolder
※檢驗文件夾是否存在
許多的文件夾的操作包括復制、移動、刪除需要特定的文件夾存在才可以對其進行操作。畢
競,腳本不能復制、移動、刪除這些不存在的文件夾,如果一個腳本嘗試去對一個不存在的
文件夾執(zhí)行類似的操作,那么會報錯"pathnotfound”。為了避免這樣的問題發(fā)生,你可以
用FolderExists方法來在你綁定一個文件夾之前檢查文件夾是否存在。FolderExists用一
個簡單的參數(shù)(文件夾路徑)來返回一個Boolean值,如果文件夾存在,返回的值為True,
否則返回的值為False。
例如,下例中列出的腳本,F(xiàn)olderExists方法來檢查文件夾C:\ESO是否存在。如果存在,
腳本用GetFolder方法來綁定文件夾。如果不存在,腳本就彈出一個messagebox說:
Folderdoesnotexist.
1SetobjFSO=CreateObject(^Scripting.FileSystemObject^)
2IfobjFSO.FolderExistsC*CAFSO")Then
3SetobjFolder=objFSO.GetFolder("C:\FS0")
4Wscript.Echo"Folderbindingcomplete.”
5Else
6Wscript.Echo"Folderdoesnotexist?”
7EndIf
※如何建立文件夾
你不可能永遠都使用你現(xiàn)有的文件系統(tǒng)結構,從來不去更改你的文件系統(tǒng)結構。而事實上,
文件系統(tǒng)是動態(tài)的,因為需要變動,現(xiàn)存的文件夾可能被刪除,新的文件夾可能被創(chuàng)建。例
如,你的單位在
fileservers上給用戶提供空間,你需要在每個新用戶來的時候創(chuàng)建一個新的文件夾給他。
FSO給腳本編寫者提供了這樣的能力,可以讓你通過腳本來創(chuàng)建文件夾。例如在上例中腳本
檢查特定的文件夾是否存在,如果存在,腳本用GetFolder的的方法來綁定到這個特定的文
件夾,如果不存在,腳本彈出一個消息框。雖然這個方法避免了腳本的失敗,但是你或許更
希望在文件夾不存在的時候來創(chuàng)建一個文件夾,而不是簡單的報告說文件夾不存在。為了做
到這點,首先創(chuàng)建?個FSO對象實例,然后用CreateFolder方法,將文件夾的完成路徑作
為參數(shù),例如,下面腳本用這個方法來創(chuàng)建一個新的文件夾C:\FS0
1Setob,jFSO=CreateObject(""Scripting.FileSystemObject^)
2SetobjFolder=objFSO.CreateFolder(*C:\FSO")
如果文件夾存在,那么會報錯說"fileexists\基于此,你需要在創(chuàng)建文件夾的之前檢查
文件對象是否存在。
Note:ESO只能在本地創(chuàng)建文件夾。如果你想在遠程的計算機上創(chuàng)建文件夾,你需要用到
wshcontroller對象。你可以在本地創(chuàng)建文件夾然后用WMI來將文件夾移動到遠程的計算
機上。(這個文件夾只能先創(chuàng)建再用WMI移動,因為m不支持創(chuàng)建文件夾的方法。)
派刪除文件夾
當你要刪除文件夾時,例如你用文件服務器存儲每一個員工的數(shù)據(jù),當這個員工離開單位時,
他的文件夾將被刪除。這保證了文件服務器上的磁盤空間,同樣,你或許用?個腳本來創(chuàng)建
一個文件夾來存儲臨時文件,當腳本執(zhí)行完畢的時候,你會刪除這個臨時的文件。
DeleteFolder方法使你可以刪除文件夾和文件夾下的所有文件。DeleteFolder需要一個單獨
的參數(shù):文件夾的完全路徑。例如下面腳本用來刪除C:\FS0和其它所有的東西。
1SetobjFSO=CreateObject(^Scripting.FileSystemObject^)
2objFSO.DelctcFoldcr(*C:\FS0O
這個方法會立即刪除所有的文件,它不會讓你確認是否需要刪除就將其扔到垃圾筒。
※使用通配符(Wildcards)刪除文件夾
腳本的最大的?個優(yōu)點就是作為一個管理工具,腳本操作可以同時刪除許多個項目。例如你
可以用腳本的一個單獨的操作就可以刪除所有的文件和文件夾,而不用一個一個去刪除了。
FSO允許你用通配符來刪除-一些特定的文件。例如你希望刪除某文件夾下所有以s開頭的
文件夾,這可以用下面的命令來完成。當用類似這樣的文件夾結構來運行這個的時候,那么
文件夾subfoldcrl,subfoldcr2,scripts都會被刪除。
objFSO.De1etel'o1derCC:\FS0\S**)
下面這個腳本用來刪除以su開頭的文件夾,就是說subfolderl,Subfolder2會被刪除。
objFSO.DeleleFolder("C:\FSD\Su*")
通配符只能放在文件路徑的最末尾。
例如如下代碼將通配符放在路徑的中間,會報錯:pathnotfound
objFSO.DeleteFolder(",C:\*\Subfolder1*)
※復制文件夾及文件夾卜的內(nèi)容
復制文件夾和文件夾當中所有數(shù)據(jù)能力的對于系統(tǒng)管理任務來說非常重要。有時你需要復制
文件夾來創(chuàng)建備份,在計算機A和計算機B上有同樣的文件夾,如果計算機B意外的down
掉之后,你就不怕數(shù)據(jù)丟失了,在其它的時候,你或許希望將含有特定文件的文件夾復制到
很多臺計算機上。用腳本來向各個計算機復制這個文件夾比手工復制高效的多。
1、CopyFolder方法允許你復制一個文件夾到另外一個地方。當不用通配符的時候,這個
CopyFoldcr的方法和命令Xcopy/E命令一樣:它拷貝所有的文件和子文件夾,包括空的文
件夾。這個命令需要兩個參數(shù):源文件夾這個文件夾可以被確定為本地路徑(C:\Script)
或者為UNC路徑(\\helpdesk\scripts)。目標文件夾-》這個文件夾也可以是本地文件夾和
UNC路徑。如果目標文件夾不存在,那么將自動創(chuàng)建一個文件央。此外這個方法有個可選的
參數(shù):Overwrite,當這個參數(shù)存在時,默認的情況下腳本會覆蓋已經(jīng)存在的目標文件夾。
Note:CopyFoldcr方法會在遇到錯誤時停止,即使這個腳本中包含有OnErrorResumeNext
語句。例如你用腳本用來拷貝100的子文件夾,當成功拷貝三個之后,遇到一個錯誤。這時
腳本會中止,它不去嘗試剩下的97的文件夾。
在下例中用CopyFolder的方法來復制文件夾C:\scripts到c:\FS0并且復寫目標文件
夾。注意,這個的結果不是C:\ESO\Scripts而是C:\ES0下有和C:\Scripts有同樣的文
件。如果你想更改文件夾叫C:\FSO\Scripis,你應該將目標文件夾改為C:\FSO\Scripls
1ConstOverWriteEiles=True
2SetobjFSO=CreateObject(*Scripting.FileSystemObject^)
3objFSO.CopyFolder'C:\Scripls","C:\FSO”,OvcrWritcFilcs
Note:因為這個CopyFolder是一個單獨的操作,你沒有辦法來跟蹤它的進程。你只是需要
簡單的等待操作的結束。如果你想監(jiān)視copy
命令的過程,你應該用shell應用程序。
※使用通配符(Wildcards)復制文件夾
用這個CopyFolder命令也可以拷貝所有文件夾和子文件夾下的文件。這樣可能導致一個問
題,如果只是想拷貝C:\FS0
下的文件,而不是想拷貝C:\FSO\Subfolderl,C:\FS0\Subfolcer2,C:\FS0\Sbufolder3下
的文件。
可是,不幸的是這里沒有直接的辦法來不拷貝子文件夾中的文件而只是拷貝父文件夾中的文
件,你可以用通配符來限制子文件夾的拷貝。例如如卜的腳本代碼只是拷貝以log
字母開頭的文件夾。但是,你用通配符的時候就只是拷貝那些符合特定要求的文件夾才被拷
貝:
objFSO.CopyFolder"C:\Scripls\Log*","C:\Archive”,True
當上面的腳本代碼執(zhí)行的時候,C:\Scripts\logs,C:\Scripts\Logfiles被拷貝了,包括它
們的文件和子文件夾中的文件,但是,在
C:\Scripts的文件沒有被拷貝。當你用CopyFolder
方法的時候,你不能只是拷貝文件夾中的文件,而不拷貝子文件夾中的蚊子。如果你想只是
拷貝文件而不拷貝子文件夾的文件,你可以應用CopyEile方法。
※移動文件夾
當你復制一個文件夾從一個地方到另外一個地方的時候,你以身制結束而告終。有時候這個
正是你想要的,但是有的時候,你不需要兩份文件的信息,你或許希望將文件夾從計鳧機
A移動到計算機B,或者從硬盤C移動到硬盤
D。移動工作總會移動到特定磁盤的剩余空間上。例如你或許會周期的將很少訪問的文件夾移
動到存檔磁盤中。此外你或許有一個腳本來監(jiān)視本地計算機的信息,當監(jiān)視結束的時候,你
需要將它上傳到服務器,然后將本地文件刪除,然后本地計算機就開始下一次的監(jiān)視。
MoveFolder需要兩個參數(shù):
1、Sourcefolder源文件夾,可以是本地路徑或者是UNC路徑。
2、Destinationfolder目標文件夾,這個文件系也可是本地或者UNC路徑。
如果你的目標文件夾不存在,那么移動是成功的。如果目標文件夾存在,那么不成功。你不
能用這個MoveFolder的方法來覆蓋一個文件夾。下例股本中,移動本地的文件夾
C:\Scripts到?個共享的文彳匕夾\\helpdesk\management
1SetobjFSO=CreateObject(*Scripting.FileSystemObject*)
2objFSO.MoveFolder"C:\Scripts","\\helpdesk\management”
注意用MoveFolder
方法當腳本失敗后不能循環(huán)操作。例如,假如你的網(wǎng)絡連接在腳木符文件從一個計算機移動
到另外一個計算機完成前失敗了,那么很有可能你一些文件在計算機A上,另外一些文件在
計算機B上,也有可能在移動的過程中丟失一些文件。因為這個MoveFoldcr的方法無法讓
腳本恢復到以前狀態(tài)。
因為如此,你或許需要兩個方法來完成文件在網(wǎng)絡中的移動:CopyFoldcr和DclelcFoldcr。
你可以用CopyFolder來將文件從計算機A移動到計算機B。當復制的操作結束之后,你用
DeleteF'older來刪除計算機A上的文件,當復制操作失敗的時候,你可以確保你的文件還
在你的計算機上。
※重命名文件夾
在FSO中沒有提供RenameFolcer方法重新命名文件夾。但是瓦以用
MoveFolder方法來將文件夾移動到相對同樣的位置,例如假如有文件夾路徑如下:
C:\Scripts\PcrformanccMoniloring\Scrvers\DomainControllcrs\CurrentLogs
如果你用Windows瀏覽器來更改文件夾的名字,那么文件夾還是它本身
C:\Scripts\PerformanceMonitoring\Servers\DomainContro11ers\ArchivedLogs
MoveFolder的方法可以讓你完成同樣任務,你將
C:\Scripts\PerformanceMonitoring\Servers\DomainControllers\CurrentLogs作為源路
徑,將C:\Scripts\PerformanceMonitoring\Servers\DomainControllers\ArchivedLogs
作為目標路徑。這樣的結果和在windows瀏覽器中更改文件夾的名字效果是樣的。
例如,下例中的腳本將文件夾C:\FSO\Samples更改為C:\FSO\Scripts在腳本運行之前,
Sample是C:\Scripts的文件夾,在腳本運行之后,就是C:\FS0的子文件夾了。此外Scripts
(FSO下的)含有原來Sample
所有的文件和子文件。
1SetobjFSO=CreateObject(*Scripting.FileSystemObject*)
2objFSO.MoveFolder"C:\FSO\Samples","C:\FSO\Scripts”
※獲得文件夾屬性
因為文件夾是一個COM對象,它們的屬性可以被獲得和列舉出來,為/列舉詳細的文件夾信
息,你可以用文件夾對象,它是FSO
的組件之一。文件夾對象的屬性列舉在了下表中。
Attributes關于文件夾的屬性信息。
DateCrcated文件夾創(chuàng)建的日期
DateLastAccessed用戶最后訪問這個文件夾的日期
DateLastModified用戶最后更改文件夾屬性的日期
Drive磁盤信息包括拖尾符號(比如,C:)標識文件夾所在的磁盤
Files存儲在這個文件夾中所有文件的信息。
IsRootFolderBoolean值來表明這個文件夾是否是根文件夾
Name文件夾的名字但不包括路徑信息
ParentFolder文件夾存放的父文件夾的名字
PropertyDescription
Path文件夾的路徑
ShortNameMS-DOS類型的文件夾的名字,遵循8.3的命名規(guī)則。
ShortPathMS-DOS類型的文件夾的名字,遵循8.3的命名規(guī)則。
Size文件夾的大小,單位是bytes,包含子文件和子文件夾的大小在內(nèi)。
SubFolders第?層的子文件夾。在Subfolders中的子文件夾不在此列中。
Type對于文件夾的描述
※列舉文件夾的屬性
為了得到一個文件夾的屬性,一個腳本必須:
1.創(chuàng)建一個FSO實例
2.用GetFolder的方法綁定特定文件夾
3.用Echo的方法顯示屬性。
當你對一個文件夾的屬性進行操作的時候,注意文件的屬性和子文件夾的屬性是以集合的形
式返回的,不是單獨返回一個的。此外Attributes屬性返回一個屬性值。
1SetobjFSO=CreateObject("Scripting.FileSystemObjectw)
2SetobjFolder=objFSO.GetFolder("C:\FS0")
3Wscript.Echo"Dalecreated:"&objFolder.DateCreated
4Wscript.Echo“Datelastaccessed:"&objl'older.DateLastAccessed
5Wscript.Echo"Datelastmodified:"&objFolder.DateLastModified
6Wscript.Echo"Drive:"&objFolder.Drive
7Wscript.Echo"Isrootfolder:"&objFolder.IsRootFolder
8Wscript.Echo"Name:"&objFolder.Name
9Wscript.Echo"Parentfolder:"&objFolder.ParentFolder
10Wscript.Echo"Path:"&objEolder.Path
11Wscript.Echo“Shortname:"&objFolder.ShortName
12Wscript.Echo"Shortpath:&objFolder.ShortPath
13Wscript.Echo"Size:"&objFoldcr.Size
14Wscript.Echo"Type:"&objFolder.Type
※管理文件夾的屬性
文件系統(tǒng)支持屬性的定義。就是文件夾中和文件夾名字和文件夾大小無關的信息。例如如果
你在Windows瀏覽器中右擊某個數(shù)據(jù)夾的時候,點Properties你就可以訪問文件夾的屬性
了。
FS0可以返回幾個關于文件夾信息的重要屬性。這些屬性和相應的值,列舉在下表中:
Hidden2隱藏,就是在Windows瀏覽器口不可見
System4表示它是一個系統(tǒng)文件夾。建議不要更改系統(tǒng)文件夾的內(nèi)容。
Directory16應用到所有的文件夾的標準值。所有可以被FSO訪問的文件
夾讀有這個值,最小位16。
Archive32存盤的屬性用在備份程序中,用來決定文件是否需要備份。
如果這個值enabling表示文件夾在卜.一次增量備份中會備份。如果
是disabling表示不在下一次增量備份中備份
Compressed2048友明這個文件夾是否是壓縮的
雖然這些看起來很簡單,但是從
FS0返回的數(shù)據(jù)看起來會讓你感到很迷惑。例如,你返回一個文件夾的屬性值,你或許會看
到20,但是這個值并不是像上面一樣的標準值。此外,你可能會獲得一個單獨的值,雖然這
個文件夾有說有的屬性。這種情況是,腳本并不是返回如
2,4,16,32,2048這樣的值,而只是返回一個2102。這是因為這些值是以位圖的形式顯示的。
Note:對于屬性值,它返回和存儲的數(shù)據(jù)是以位圖的形式的。對于位圖你應該不會奇怪,比
如后綴名為.bmp的圖形文件
位圖看起來就是一系列的開關,如果特定的開關是關閉的,那么這個開關的值就是0,如果
是開啟的,比如文件夾對象吧,它就具有上表中所列出的值。而位圖的值就是這些開關的值
的總和。如果你用腳本查詢這個文件夾的屬性,腳木就返I可一個值為16.
與其相反,如果有三個開關是開啟的:隱藏(值是2),Directory(值是16),壓縮(值是2048).
那么這個位圖的值應該是2+15+2048,或者值是2066。這個也是用腳本查詢的時候返回的值。
位圖被設計成只是有一種辦法來獲取特定的值。得到值2066的方法只有一個就是壓縮和隱
藏.你不可能通過別的數(shù)學方法來算得這樣的值。
這個設計可以返回值并且決定哪個開關沒有開哪個沒有開。這個可以允許你來判斷文件夾的
哪個屬性設定了。如果你得到了這個2066
的值,那么它的屬性就是隱藏壓縮的文件夾。幸運的是,你不必去作任何單獨的數(shù)字運算,
你可以用邏輯與AND操作來決定哪個開關是否是on還是off。例如如下代碼查詢文件夾是
否是隱藏的,如果是回顯一個信息框:Hiddenfolder
IfobjFolder.AttributesAND2Then
Wscript.Echo"Hiddenfolder.z,
EndIf
或者:IfobjFolder.AttributesAND16Then
下列腳本先綁定文件夾C:\FS0,然后回顯文件夾屬性:
(譯者注:這個其實是挨個匹配的,所以你耍是測試/兩個屬性,它都會顯示出來的。)
1SetobjFSO=CreateObject("Scripting.FileSystemObject")
2SetobjFolder=objFSD.GetFolder("C:\FS0")
3IfobjFolder.AttributesAND2Then
4Wscript.Echo“Hiddenfolder.*
5EndIf
6IfobjFolder.AttributesAND4Then
7Wscript.Echo"Systemfolder.*
8EndIf
9IfobjFolder.AttributesAND16Then
10Wscript.Echo"Folder.
11EndIf
12IfobjFolder.AttributesAND32Then
13Wscript.Echo"Archivebitset.*
14EndIf
15IfobjFolder.AttributesAND2048Then
16Wscript.Echo^Compressedfolder.”
17EndIf
※改變文件夾屬性
文件夾的每個屬性可以看成一個個開關,如果關于隱藏的開關是ON的,那么這個文件夾就
是隱藏的,如果這個開關是0即
的,那么這個文件夾就不是隱藏的,你可以選擇打開或者關掉它們,對于文件夾的屬性也是
如此:對于其它的開關,你可以將屬性設置為開或者設置為關,你可以用腳本來控制這些開
關的,最簡單的控制屬性開關的辦法是用如卜?的程序:
1.用GetFolder的方法來綁定到一個文件夾。
2.檢查你需要更改的值。例如你想隱藏一個文件夾,看這個文件夾是否是已經(jīng)隱藏了
3.如果這個文件夾是隱藏的,用XOR操作來將開關轉換成非隱藏的。如果這個文件夾不是
隱藏的,注意不要用
XOR,如果你用了,開關會被觸發(fā),文件夾會中止于隱藏。例如,下列腳本用AND來判斷文
件夾C:\FS0的隱藏屬性開關是否開著。如果它是開的,腳本用X0R
操作來將開關關閉來顯示文件夾。
1SetobjFSO=CreateObject(^Scripting.FileSystemObject/7)
2SetobjFolder=objFSO.GetFolder("C:\FS0")
3IfobjFoldcr.AttributesAND2Then
4objFolder.Attributes=objl'older.AttributesXOR2
5EndIf
除非很少的一些情況以外,文件夾用來作為單獨存放文件的地方。有時候,這些文件夾是系
統(tǒng)需要的。例如操作系統(tǒng)希望在特定的文件夾內(nèi)找到特定的文件。在其它的?些時候,文件
夾是系統(tǒng)管理員管理計算機的一種工具也是用戶管理文件的工具。系統(tǒng)管理員可能希望將腳
本放在叫做Scripts
的文件夾,將一些trouble-shooting的工具放在叫做DiagnosticTools的文件夾。用戶
或許將他們預算信息放在叫做Budgets
的文件夾,而將薪水的信息放在叫做Timecards
的文件夾。當然,文件夾一般是限制使用的,你必須知道這個文件夾是存放的是什么文件。
系統(tǒng)管理員需要知道是不是有個特定的腳本存在C:\Scripts文件夾中,用戶需要知道是不
是有個特定的窗體存在C:\Budgcts的文件夾中。文件夾對象包含了一些屬性可用來返回存
儲在文件夾內(nèi)文件集合的信息,為了得到這些信息,你的腳本必須:
1.創(chuàng)建一個FSO對象實例。
2.用GetFolder的方法來綁定到一個適當?shù)奈募A。
3.設置一個對象reference來指向文件夾的屬性
4.用ForEach循環(huán)來列舉出所有的文件和他們的屬性。腳本不必去綁定到每一個單獨的文
件去獲得文件的信息。
在卜列腳本中返回在文件夾C:\FS0卜所有文件的信息并且回顯他們的名字和大?。?/p>
1SetobjFSO=CreateObject(^Scripting.FileSystemObject/,)
2SetobjFolder=objFS。.GetFolder("C:\FS0")
3SetcolFiles=objFolder.Files
4ForEachobjFileincolFiles
5Wscript.EchoobjFile.Name,objFile.Size
6Next
對于大多數(shù)返回的集合來說,你不能控制輸出信息的順序。就是說你不能將輸出的格式定義
為按照名字,按照大小或者其它別的原則。如果你想讓輸出的東西按照特定的格式,你就必
須將他們拷貝到數(shù)組,目錄或者一個disconnectedrecordset然后將他們分類排列。
?VBS腳本運行庫手冊之三一一子文件夾
為了需要知道文件夾中存放的文件,你需要知道文件夾子文件夾,這樣,你才能更好的了解
文件夾的整體結構。文件夾對象包含了一個Subfolders屬性,用來放會在文件夾下的
top-level子文件夾的信息。
Top-level子文件夾是直接在文件夾下面的。在子文件夾中的子文件夾不在這個范圍之內(nèi)。
例如,在下例中,只有SubfolderlSubfolder2
是文件夾scripts的lopTcvcl的子文件夾。所以,如果用Subfolders這個屬性來返回
值的話,就只是會返回Subfolderl和Subfolder2
為了得到一個子文件夾的集合,你的腳本必須:
1.創(chuàng)建一個FSO實例
2.用GetFolder的方法綁定到一個文件夾。
3.創(chuàng)建一個對象reference來表示Subfolders屬性。這個是一個集合對象,因為它含有
很多個對象。
在得到了對象reference這樣一個集合之后,你可以用一個ForEach循環(huán)來列舉出子文件
夾。下列腳本綁定到文件夾
C:\FS0,然后返回子文件夾的大小和名字。除/文件夾的名字之外,你可以返回信息。
1SetobjFSO=CreateObject(^Scripting.FileSystemObject,z)
2SetobjFolder=objFSO.GetFolder(*C:\FS0")
3SetcolSubfolders=objFolder.Subfolders
4ForEachobjSubfolderincolSubfolders
5Wscripl.EchoobjSubfolder.Name,objSubfolder.Size
6Next
和你的文件系統(tǒng)的設計有關,有時知道top-level
的了?文件夾就可以提供足夠的文件夾結構的信息。在多數(shù)文件系統(tǒng)中,文件夾是嵌套的,或
者是被嵌套的。關于子文件夾的集合可以告訴你C:\Accounting包含兩個子文件夾2001、
2002,但是它不能告訴你他們的子文件夾的信息。
幸運的是,你可以用遞歸來杳詢一系列子文件夾的的信息。例如用Subfolders屬性返回了
一些top-level的子文件夾:
為返回完整的一系列子文件夾的信息、,你需要用遞歸函數(shù)。這個函數(shù)用來調(diào)用它自己。下面
腳本可以列舉出文件夾的所有子文件夾:
1.創(chuàng)建一個FSO對象實例
2.用GetFolder的方法來綁定到文件夾C:\Scripts.GetFolder的方法用來返回文件夾對
象C:\Scripts.然后這個
C:\Scripts作為遞歸了一函數(shù)ShowSubPolders的參數(shù)。這個子程序會列舉出所有的
C:\Scripts下的子文件夾。返回一個包含在
C:\Scripts下所有子文件夾的信息。這個集合有兩個值:Subfolderlfl!Subfolder2.
4.返回第一個參數(shù)的路徑Subfolder]。這個子程序用這個來作為參數(shù)將它輸入給它自身。
換句話說,腳本現(xiàn)在調(diào)用ShovSubFolders,并且參數(shù)是Subfolderlo
5.返回在Subfolderl中的所有參數(shù)。這個集合有兩個值:SubfolderlAandSubfolderIB.
6.回顯第一個集合的路徑,SubfolderlAo子程序用這個來作為參數(shù)調(diào)用自日。換句話說,
就是用ShowSubFolders這個函數(shù),那么它的參數(shù)是SubfolderlA來作參數(shù)。
7.繼續(xù)執(zhí)行下一個參數(shù)。因為在SubfolderlA中沒有了子文件夾。這個子程序用
SubfoldcrlB作為參數(shù)。
8..完成了關于文件夾Subfolderl的循環(huán)。這個過程結束在SubfolderlB沒有子文件夾。
腳本然后用Subfolder2
來作為參數(shù),并且用行上面整個過程。
1SetFSO=CreateObject(*Scripting.FileSystemObject,,)
2ShowSubFoldersFSO.GetFolder("C:\Scripls")
3SubShowSubFoldcrs(Folder)
4EorEachSubfolderinFolder.SubFolders
5Wscript.EchoSubfolder.Path
6ShowSubFoldcrsSubfolder
7Next
8EndSub
當用CScripl運行的時候,命令行中顯示如下:
C:\scripts\Subfoicler1
C:\scripts\Subfolderl\Subfolder1A
C:\scripts\Subfolderl\SubfoldcrIB
C:\scripts\Subfoider2
C:\scripts\Subfolder2\Subfolder2A
C:\scripts\Subfolder2\SubColder2A\Subfolder2A-1
C:\scripts\Subfolder2\Subfolder2B
C:\scripts\Subfolder2\Subfolder2C
為了獲得完整的文件夾列表,你可以從根文件夾查起:比如C:\
◎VBS腳本運行庫手冊之四一一管理文件
ManagingFiles
管理文件系統(tǒng)的最終任務還是歸結為管理單獨的文件。作為一個系統(tǒng)管理員,你的工作是跟
蹤存儲在計算機上的文件。例如,你需要知道正確的診斷工具是否被克制到「server上,
你需要知道特定的文件(比如游戲文件或者音樂文件)是否被復制到了文件服務器上了,盡
管你用了組策略去阻止他們將文件拷貝到文件的server。你需要知道是否有的文件放在計算
機上已經(jīng)有幾個月沒有去訪問了,而這些功能通過類似知道磁盤的剩余空間這樣的操作是無
法知道的。此外為了跟蹤這些文件,你也需要動態(tài)的管理他們:需要復制,需要移動,需要
重新命名,需要刪除。FSO提供了一些方法來幫助你完成這些管理任務。
BindingtoaFile
FSO給你提供了一些方法,比如CopyFile,DeleteFile
允許你的腳本不用綁定一個特定的文件就可以對文件實例進行操作。而其它的任務,就需要
文件對象。比如,為了獲得一些屬性,你的腳本首先就需要綁定到?個文件,然后再獲得文
件的屬性。GetFile方法允許你綁定到一個獨立的文件。為了做到這點,你先創(chuàng)建一個FSO實
例,然后創(chuàng)建一個文件對象。當你用GetFile方法的時候,你必須:1、確定文件的路徑:
這個路徑可以是一個本地路徑,也可以是一個UNC路徑(例如:
\\accounting\receivables\scriptlog.txt)在路徑當中你不能用通配符也不能有多個文件。
用GetFile方法你在同一個時刻只能綁定一個單獨的文件。2、當綁定的對象分配給一個變
量的時候就要用到Set這個關鍵詞。
例如,卜,面腳本綁定到了文件:C:\FSO\Scripllog.1x1
1SetobjFSO=CreateObject(*Scripting.FileSystemObject*)
2objFSO.GetFile(,zC:\FSO\ScriptLog.txt*)
一般來講,你最好用絕對路徑來作GetFile的參數(shù)。這樣確保腳本總是可以在文件中運行。
但是,用相對路徑也是可以的,例如,如下的腳本代碼會綁定到
Scripllog.txt會成功,因為腳本和這個文件在同一個文件夾旦面:
objFSO.GetEile(*ScriptLog.txt*)
同樣,下面的代碼實例如果這個腳本和這個文件在同-一個文件夾也會綁定到Scriptlog.txt:
objFSO.GetFile(*.\ScriptLog.txt*)
注意:FSO不會用路徑環(huán)境信息去搜索文件。例如,你可以在命令行中敲如calc.exe來打
開計算機,而無論你當前的目錄是在哪里,因為操作系統(tǒng)默認的情況下去搜索所有的文件的。
但是用這個GetFile方法的時候,它不是這樣的工作的。
如卜腳本除非是在文件夾C:\Windows\System32的文件夾下,否則都不會運行成功的。
objFSO.GetFile("calc.exe")
有時知道文件是否存在是十分重要的,這個可以作為軟件清單的?部分。例如你或許希望檢
查所有的郵件服務器來看特定的腳本是否存在。用腳本來實現(xiàn)系統(tǒng)管理任務來說,知道腳本
存在與否很重要的。比如你或許希望當你復制、移動、刪除或者操作不存在的文件的時候,
腳本報錯。為了避免出現(xiàn)錯誤,你可以用FileExists方法來檢杳文件是否存在。FileExists
方法要求一個單獨的參數(shù):文件的路徑,然后返回一個特定的Boolean值:如果文件存在,
返回的是True,如果文件不存在,返回的是False。
如下面腳本用FileExists方法來檢查文件C:\FSO\Scripilog.txt是否存在,如果存在,
用GetFile方法來綁定到這個文件,如果不存在,腳本回顯一個message“filedoesnot
exist”
1SetobjFSO=CreateObject(^Scripting.FileSystemObjectz,)
2IfobjFSO.FileExistsC^C:\FSO\ScriptLog.txt*)Then
3SetobjFile=objFSO.GetFileCC:\ESO\ScriptLog.txt*)
4Else
5Wscript.Echo“Filedocsnotexist.?
6EndIf
你不能用通配符來檢查文件夾中特定類型的文件是否存在,你也不能用通配符拉來檢查文件
夾中所有的文件-。如下面腳本,無論在文件夾
C:\FS0\下存在多少文件,都不會報錯出來,而是總是返回一個False.
WScript.EchoobjFSO.FileExists(*C:\FS0\*.*")
如果你希望遵循一些條件原則檢行一些文件而不是基于路徑,你有下面兩個選擇:
1、用GetFolder
對象來綁定一個文件夾,然后返回文件的屬性,這樣重復操作直到篩選出你感興趣的。例如,
你可以列舉出所有的文件和文件的擴展名,然后跟蹤看有多少個后綴名
為.doc的文件。
2、用m,它允許你創(chuàng)建更多的Fl標查詢。比如選出所有后綴名為.doc的文件。你可以用
計數(shù)的辦法來返回你要的特定為條目。如果數(shù)值是0,那么,最少有一個是.doc的文件。
DeletingaFile
用FS0來創(chuàng)建腳本刪除文件讓你可以自動執(zhí)行類似與磁盤清理之類的操作。例如,你可以用
腳本定期查詢和刪除所有的臨時文件。你也可以依照一些規(guī)則來刪除文件,比如刪除六個月
都沒有被訪問的文件,或者特定的后綴名的文件,比如(.bmp或者.mp3)你可以首先創(chuàng)建FS0
對象實例,然后調(diào)用DcleteFile方法來刪除文件,輸入文件路徑作為參數(shù)。
如下面腳本刪除了文件C:\FSD\Scriptlog.txt
1SetobjFSO=CreateObject(^Scripting.Fi]eSystemObjectz,)
2objFSO.DclctcFilcrC:\FSO\ScriptLog.txt*)
默認的情況下,DeleteFile方法不會刪除只讀文件。事實上,當你嘗試刪除一個只讀文件時,
腳本會報錯出來。為了避免這樣的錯誤出現(xiàn),如想刪除只讀文件的話,需添加強制參數(shù),當
強制參數(shù)設成True
的時候,那么DelcteFile可以刪除任何文件。如下面這行代碼可以刪除文件
Scriptlog.txt,即使它只是一個只讀文件。
1、objFSO.DclctcFilcC^C:\FSO\ScriptLog.txt*,True)
2、DeletingaSetofFiles
有時候你希望刪除特定的、單獨的文件。更有可能的是你可能想用腳本來刪除一系列的文件。
如在周末你或許想刪除一些存盤了的日志文件或所有的臨時文件。你可以通過通配符來刪除
一個文件夾之內(nèi)的一些文件。但是你不能用DcleteFile方法來直接刪除多個文件夾內(nèi)部的
文件。你可以通過用篩選每個數(shù)據(jù)夾的辦法來逐個刪除每個文件夾內(nèi)部的文件。如果你想刪
除多個文件夾內(nèi)部的特定類型的文件(比如刪除計算機上全部的.TMP文件)你應該用m而
不是用FS0o為了刪除一系列文件,調(diào)用DcleteFile方法,杈據(jù)文件的名字或者后綴名添
加通配符來提供文件夾的路徑,例如,下面的代碼用來刪除文件夾C:\FSO文件夾下
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 出口檢修合同范本
- 加工定制合同范本
- 雙橋區(qū)短途配送合同范本
- 勞動合同范本文
- 公司股權轉讓合同范本
- 勞務住宿合同范本
- 勞動合同范本老版
- 書購書合同范本
- 保潔解除協(xié)議合同范本
- 勞務派遣終止合同范本
- 下肢深靜脈血栓形成靜脈置管溶栓術后-用藥及出血觀察護理-PPT
- 16萬噸_年液化氣綜合利用裝置廢酸環(huán)保綜合利用項目環(huán)境報告書
- T∕CAEPI 43-2022 電絮凝法污水處理技術規(guī)程
- 農(nóng)村商業(yè)銀行合規(guī)風險管理暫行辦法
- 看圖寫話我是乖孩子
- 油管、套管等規(guī)格對照表
- IEST-RP-CC0053
- 模糊邏輯與模糊推理
- 玉米收割機的設計(機械CAD圖紙)
- 更高更妙的物理《摩擦角與自鎖現(xiàn)象》精講
- 金屬補償器計算大全
評論
0/150
提交評論