版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
OVBS腳本運(yùn)行庫(kù)手冊(cè)之一一一磁盤操作
文件系統(tǒng)管理是系統(tǒng)管理的一個(gè)關(guān)鍵性任務(wù)。WSII和VB腳本在這個(gè)領(lǐng)域都沒有提供相關(guān)的
功能。幸運(yùn)的是,你可以通過scriptruntime
庫(kù)來管理這些關(guān)鍵的系統(tǒng)組件,比如磁盤,文件夾和文件。這詼種主要的腳本語言,VB腳本
語言和JS腳本語言起初的時(shí)候都是設(shè)計(jì)給客戶端來編寫IE的。正是因?yàn)槿绱?,這兩個(gè)腳
本語言都有一些局限性。例如VB腳本和JS腳本內(nèi)部都沒有提供訪問文件管理的一些任務(wù),
比如:復(fù)制、移動(dòng)、刪除文件等。這樣做的目的是為了保護(hù)消費(fèi)者。大多數(shù)的的網(wǎng)站不可能
讓用戶通過網(wǎng)頁(yè)去刪除它們硬盤:上的東西。盡管如此,腳木已經(jīng)從類似的HTML的按鈕之類
的開始迅速的發(fā)展了。隨著ASP的到來,瀏覽器的編寫者要求在server上管理文件。而隨
著WSH的到來,系統(tǒng)管理員要求有在web瀏覽器外來管理文件了。
為了滿足這個(gè)要求,微軟發(fā)布的了ScriptRuntimeLibrab。它是一個(gè)單獨(dú)的DLL文
件,scrrun.dll文件,用來給腳本的編寫者們提供一些文件管理的能力,包括以下內(nèi)容:
1、獲取文件系統(tǒng)的信息,包括獲得磁盤、文件和文件夾上的信息。
2、史制,移動(dòng)和刪除文件及文件夾
3、創(chuàng)建和讀寫文本文件。
除了這些功能之外,ScriptRuntimeLibrary提供了創(chuàng)建字典的能力。也可以用來對(duì)腳本進(jìn)
行編譯,使腳本成為加密的。
Note:
這章只是討論FileSystemObJect和Dictionary的部分,對(duì)于Encode部分不作討論,
ScriptRuntimeLibrary
也是windows2000的一部分,它在你安裝或者升級(jí)微軟的應(yīng)用程序的時(shí)候也隨著升級(jí)和安
裝了:這些應(yīng)用程序有以下幾個(gè):
1、NSH2、VB腳本3、IE瀏覽器4、MicrosoftOffice5、FileSystemObject
正如它的名字一樣,F(xiàn)SO設(shè)計(jì)用來幫助你管理文件系統(tǒng),F(xiàn)SO
介許你獲取重要的文件組件信息,包括硬盤、文件夾、文件:也提供一般的系統(tǒng)管理的任務(wù),
比如復(fù)制、刪除、移動(dòng)文件和文件夾。此外FSO允許你讀寫文本文件。
用FSO其實(shí)有些用詞不當(dāng),因?yàn)閷?shí)際上FSO包含很多個(gè)對(duì)象,每個(gè)對(duì)象被設(shè)計(jì)成用來完成
特定的目的。組成FSO
的對(duì)象列在了下表中:
Drive代表系統(tǒng)中磁盤或者磁盤的集合
File代表系統(tǒng)中的一個(gè)文件或者文件的集合
Folder代表文件系統(tǒng)中的一個(gè)文件夾或者多個(gè)文件夾
Textstream代表文本文件中的讀取、寫入或者提交字符串
派磁盤管理
磁盤管理是系統(tǒng)管理的一個(gè)重要的部分。作為一個(gè)系統(tǒng)管理員,知道安裝在這個(gè)計(jì)算機(jī)上磁
盤是十分重要的,當(dāng)然,知道這個(gè)磁盤的屬性、磁盤類型、子盤大小、總共和剩余空間也是
同等重要的。作為一個(gè)腳本的編寫者,你有兩個(gè)主要的選擇來管理磁盤:NM1
&FS0。一般來講,WM!更是管理磁盤的首選項(xiàng),主要有以下幾個(gè)原因:1、WMI能返回一些
FSO無法返回的屬性,比如磁道、扇面等。
2、FSO不能返回一個(gè)目標(biāo)磁盤。而是返回所有的磁盤,然后進(jìn)行篩選出你感興趣的磁盤。而
你可以用WM1通過磁盤符號(hào)及返回特定的磁盤,WMI可以用來返回遠(yuǎn)程計(jì)免機(jī)上磁盤的信
息,但是FS0不可以,除非它用wshconlrollcr對(duì)象。
雖然WMI或許是獲得磁盤信息的最好工具。但是這里至少有兩個(gè)原因使你必須去熟悉FSOo
第一:因?yàn)橛行┑投说牟僮飨到y(tǒng)無法安裝WMI,所以只能使用FSO;
第二:最重要的一點(diǎn)是因?yàn)椋耗_本的編寫者們?cè)谙氲将@取磁盤信息的時(shí)候就會(huì)用到FSO,而
你作為系統(tǒng)管理員,可能會(huì)來存其它人的腳本,這樣就需要了解FSO.注:外國(guó)人寫的真是
拗口,我理解這句話的意思就是說FSO比WMI應(yīng)用的更廣泛一些。
X如何返回磁盤信息
在你管理計(jì)算機(jī)的磁盤之前,你需要知道你的計(jì)算機(jī)上實(shí)際上有多少磁盤可以使用。FSO允
許你管理安裝在計(jì)算機(jī)上的所有磁盤,包括移動(dòng)硬盤和網(wǎng)絡(luò)硬盤(就是只要是有盤符的就可
以了)為了返回這個(gè)集合,你需要首先創(chuàng)建一個(gè)FSO實(shí)例,然后創(chuàng)建磁盤屬性的對(duì)象。當(dāng)這
個(gè)集合返回后,你可用一個(gè)ForEach的循環(huán)來重述這個(gè)集合。
例如,下面的腳本就是要返回安裝在本地計(jì)舞機(jī)上的磁盤集合然后返回它們的盤符:
1SetobjFSO=CreateObject("Scripting.FileSystemObject")
2SetcolDrives=objFSO.Drives
3ForEachobjDrivcincolDrives
4Wscript.Echo“Driveletter:"&objDrive.DriveLetter
5Next
※如何綁定指定磁盤
如果你事先知道要綁定的磁盤(例如C盤或?個(gè)共享文件夾\\accounting\receivables),
你可以用GetDrive
的方法來直接綁定磁盤。這樣你可以不用去篩選就獲得特定磁盤的信息。GetDrive需要一個(gè)
單獨(dú)的參數(shù):磁盤符號(hào)或者是共享文件夾的UNC路徑。你可以用如下的幾種格式:CC:
C:\
在下面的腳本中首先創(chuàng)建一個(gè)FSO對(duì)象,然后用GetDrive的方法來直接綁定C盤,然后回
顯可用的磁盤空間:
1SetobjFSO=CreateObject(*Scripting.FileSystemObject*)
2SetobjDrive=objFSO.GetDrive("C:")
3Wscript.Echo"Availablespace:"&objDrive.AvailableSpace
注意,這里沒有ForEach
循環(huán),你就可以獲得磁盤的屬性。因?yàn)槟_本是返回?個(gè)單獨(dú)的磁盤對(duì)象,而不是所有對(duì)象的
集合。因此也就不用篩選了。
※如何列舉磁盤驅(qū)動(dòng)器的屬性
磁盤集合的作用總是用來監(jiān)視和列舉的。作為一個(gè)系統(tǒng)管理員,你需要知道計(jì)算機(jī)上的可用
磁盤,也需要知道磁盤的序列號(hào)、可用空間等信息。在你獲得當(dāng)前磁盤的集合或者單個(gè)磁盤
的時(shí)候,你就可以獲得下表列出的所有屬性。
1、AvailableSpace---報(bào)告磁盤上可以使用的空間,單位是bytes。如果想以kb為單位返
回,除以1024,如果想以M為單位返回,則除以
1.048,576。這個(gè)屬性返回的是可用的磁盤空間的總數(shù)。如果?個(gè)磁盤啟用了磁盤限額,那么
他返回的數(shù)字可能比實(shí)際的要小。
2.DriveLette一一返回特定磁盤的盤符。這個(gè)盤符不包含那么冒號(hào)。例如軟盤返回的是A,
而不是A:
3.DriveType一一整數(shù)的值代表不同的磁盤類型:1:移動(dòng)硬盤2:硬盤3:網(wǎng)絡(luò)硬盤
4:CD-ROM5:RAM磁盤
4.FrccSpace一一返回磁盤剩余空間的總額。單位是bytes,如果是返回的單位是kb,就除
以1024,如果是以M為單位,除以
1,048,576?注意:這個(gè)和磁盤可用空間不一樣,剩余的磁盤空間不會(huì)考慮磁盤限額。
5、FileSystem——返回文件系統(tǒng)的類型(FAT,FAT32,NTFS)
6.IsReady一一標(biāo)識(shí)磁盤是否可以訪問。這個(gè)值來判斷軟盤和CD-ROM是否為空
7.Path一一磁盤路徑。對(duì)于本地磁盤,返回盤符和脫尾符(就是那個(gè)冒號(hào)),比如A:對(duì)于
網(wǎng)絡(luò)磁盤,就返回它的UNC路徑。
8、RootFolder---返回磁盤根目錄下的文件夾。
9、SerialNumber一一磁盤的生產(chǎn)商給磁盤分配的序列號(hào)。對(duì)丁?軟盤和網(wǎng)絡(luò)硬盤來說,它們的
值是0。
10、ShareName---分配給網(wǎng)絡(luò)驅(qū)動(dòng)去的共享名稱。
11、TotalSize一一報(bào)告整個(gè)的磁盤空間,單位是bytes,如果想以kb為單位,除以1024,
如果想以M為單位返回,則單位為1,048,576。
12、VolumeName---分配給磁盤的卷名。
為了列舉安裝在計(jì)算機(jī)里的磁盤的屬性,創(chuàng)建一個(gè)FSO實(shí)例,然后創(chuàng)建一個(gè)FSO屬性的對(duì)
象,用ForEach循環(huán),來重現(xiàn)各個(gè)磁盤的配置。對(duì)于集合當(dāng)中的每個(gè)磁盤,你可以返回一
個(gè)或者的屬性。如下列腳本列舉出安裝在計(jì)算機(jī)上所有磁盤的所有屬性。
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
上述腳本有個(gè)潛在的缺點(diǎn),就是如果沒有軟盤或者光驅(qū)里面沒有光盤,會(huì)產(chǎn)生一個(gè)disknot
ready的錯(cuò)誤出來。當(dāng)磁盤沒有準(zhǔn)備好的時(shí)候用FS0來訪問會(huì)有些錯(cuò)誤的。雖然FS0可以
標(biāo)識(shí)那些沒有準(zhǔn)備好的磁盤,但是你訪問它的一些屬性的時(shí)候會(huì)報(bào)錯(cuò)出來,比如
AvailableSpace或FreeSpaceo如果磁盤沒有準(zhǔn)備好,你只可以訪問如下的四個(gè)屬性:
DriveLetter,DriveType,IsReady、ShareName。所有嘗試訪問其它屬性都會(huì)報(bào)錯(cuò)。
幸運(yùn)的是,IsReady屬性允許你用腳本來檢查一個(gè)磁盤是否準(zhǔn)備好了。IsReady返回一個(gè)
Boolean值,如果這個(gè)值是true,則磁盤準(zhǔn)好了,你可以訪問它的所有屬性,否則如果這個(gè)
值是false,則磁盤沒有準(zhǔn)備好,只能返回上面的四個(gè)屬性了。可以對(duì)每個(gè)磁盤,用IsReady
屬性來保證磁盤是準(zhǔn)備好的。如果是就返回磁盤的盤符和剩余空間,如果不是就只返回磁盤
的盤符。
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:這個(gè)問題不會(huì)發(fā)生在Will上(如果軟盤或者光驅(qū)中沒有盤,腳本就會(huì)失敗),WMI只
是認(rèn)為返回的空間為Null..
?VBS腳本運(yùn)行庫(kù)手冊(cè)之二一一管理文件夾
※管理文件夾
磁盤的屬性比如磁盤的剩余空司,磁盤的總額提供了一個(gè)全局的信息給系統(tǒng)管理員。但是,
對(duì)于系統(tǒng)管理而言,磁盤的信息雖然是必須的,但是還不夠。知道文件存儲(chǔ)在哪個(gè)盤固然重
要,但是你也需要知道文件是存儲(chǔ)在哪個(gè)文件夾下的。此外許多的系統(tǒng)管理任務(wù)都是發(fā)生在
文件夾級(jí)別的,比如復(fù)制,移動(dòng),刪除和列舉文件夾的內(nèi)容。
FS0可以返回一個(gè)磁盤上文件夾的全部信息。此外,F(xiàn)S0提供了一系列的方法來完成諸如:
復(fù)制、移動(dòng)、刪除文件夾的操作。
X如何綁定指定的文件夾
在微軟的調(diào)用文件中,文件夾是COM
對(duì)象。這就是說在你訪問一個(gè)單獨(dú)的文件夾的屬性時(shí),你必須去創(chuàng)建一個(gè)文件夾的對(duì)象
reference,這個(gè)過程叫做綁定。你可以用FSO和GetObject的方法來綁定到一個(gè)文件夾。
當(dāng)用GetFolder的時(shí)候,你必須:路徑既可以寫成本地路徑也可以寫成UNC路徑(例如:
\\accounting\receivables)o但是通配符不能出現(xiàn)在路徑當(dāng)中,此外,你不可以創(chuàng)建一個(gè)單
獨(dú)的對(duì)象reference
來同時(shí)綁定到多個(gè)文件夾。例如,如下的腳本代碼會(huì)產(chǎn)生一個(gè)錯(cuò)誤:
objFSO.GetFolder("C:\FSO","C:\Scripts")
如果你想針對(duì)多個(gè)文件夾同時(shí)工作,你要么用BII或者用針對(duì)每個(gè)文件夾創(chuàng)建單獨(dú)的對(duì)象
referenceo
在設(shè)置的時(shí)候Set這個(gè)關(guān)鍵詞是必須的,因?yàn)槟阋獦?biāo)識(shí)這個(gè)對(duì)象reference變量。
例如下面的腳本綁定文件夾C:\FSO
1SetobjESO=CreateObject(*Scripting.FileSystemObject*)
2SetobjFolder=objFSO.GetFolder(*C:\FSO*)
雖然通配符是不允許的,但是你可以用點(diǎn)來關(guān)聯(lián)到當(dāng)前的文件夾(.),你可以用點(diǎn)點(diǎn)(..)來綁
定到父文件夾,用\
綁定到根文件夾。例如如下代碼語句綁定到當(dāng)前的文件夾:
SetobjFolder=objFSO.GetFolder
※檢驗(yàn)文件夾是否存在
許多的文件夾的操作包括復(fù)制、移動(dòng)、刪除需要特定的文件夾存在才可以對(duì)其進(jìn)行操作。畢
競(jìng),腳本不能復(fù)制、移動(dòng)、刪除這些不存在的文件夾,如果一個(gè)腳本嘗試去對(duì)一個(gè)不存在的
文件夾執(zhí)行類似的操作,那么會(huì)報(bào)錯(cuò)"pathnotfound”。為了避免這樣的問題發(fā)生,你可以
用FolderExists方法來在你綁定一個(gè)文件夾之前檢查文件夾是否存在。FolderExists用一
個(gè)簡(jiǎn)單的參數(shù)(文件夾路徑)來返回一個(gè)Boolean值,如果文件夾存在,返回的值為True,
否則返回的值為False。
例如,下例中列出的腳本,F(xiàn)olderExists方法來檢查文件夾C:\ESO是否存在。如果存在,
腳本用GetFolder方法來綁定文件夾。如果不存在,腳本就彈出一個(gè)messagebox說:
Folderdoesnotexist.
1SetobjFSO=CreateObject(^Scripting.FileSystemObject^)
2IfobjFSO.FolderExistsC*CAFSO")Then
3SetobjFolder=objFSO.GetFolder("C:\FS0")
4Wscript.Echo"Folderbindingcomplete.”
5Else
6Wscript.Echo"Folderdoesnotexist?”
7EndIf
※如何建立文件夾
你不可能永遠(yuǎn)都使用你現(xiàn)有的文件系統(tǒng)結(jié)構(gòu),從來不去更改你的文件系統(tǒng)結(jié)構(gòu)。而事實(shí)上,
文件系統(tǒng)是動(dòng)態(tài)的,因?yàn)樾枰儎?dòng),現(xiàn)存的文件夾可能被刪除,新的文件夾可能被創(chuàng)建。例
如,你的單位在
fileservers上給用戶提供空間,你需要在每個(gè)新用戶來的時(shí)候創(chuàng)建一個(gè)新的文件夾給他。
FSO給腳本編寫者提供了這樣的能力,可以讓你通過腳本來創(chuàng)建文件夾。例如在上例中腳本
檢查特定的文件夾是否存在,如果存在,腳本用GetFolder的的方法來綁定到這個(gè)特定的文
件夾,如果不存在,腳本彈出一個(gè)消息框。雖然這個(gè)方法避免了腳本的失敗,但是你或許更
希望在文件夾不存在的時(shí)候來創(chuàng)建一個(gè)文件夾,而不是簡(jiǎn)單的報(bào)告說文件夾不存在。為了做
到這點(diǎn),首先創(chuàng)建?個(gè)FSO對(duì)象實(shí)例,然后用CreateFolder方法,將文件夾的完成路徑作
為參數(shù),例如,下面腳本用這個(gè)方法來創(chuàng)建一個(gè)新的文件夾C:\FS0
1Setob,jFSO=CreateObject(""Scripting.FileSystemObject^)
2SetobjFolder=objFSO.CreateFolder(*C:\FSO")
如果文件夾存在,那么會(huì)報(bào)錯(cuò)說"fileexists\基于此,你需要在創(chuàng)建文件夾的之前檢查
文件對(duì)象是否存在。
Note:ESO只能在本地創(chuàng)建文件夾。如果你想在遠(yuǎn)程的計(jì)算機(jī)上創(chuàng)建文件夾,你需要用到
wshcontroller對(duì)象。你可以在本地創(chuàng)建文件夾然后用WMI來將文件夾移動(dòng)到遠(yuǎn)程的計(jì)算
機(jī)上。(這個(gè)文件夾只能先創(chuàng)建再用WMI移動(dòng),因?yàn)閙不支持創(chuàng)建文件夾的方法。)
派刪除文件夾
當(dāng)你要?jiǎng)h除文件夾時(shí),例如你用文件服務(wù)器存儲(chǔ)每一個(gè)員工的數(shù)據(jù),當(dāng)這個(gè)員工離開單位時(shí),
他的文件夾將被刪除。這保證了文件服務(wù)器上的磁盤空間,同樣,你或許用?個(gè)腳本來創(chuàng)建
一個(gè)文件夾來存儲(chǔ)臨時(shí)文件,當(dāng)腳本執(zhí)行完畢的時(shí)候,你會(huì)刪除這個(gè)臨時(shí)的文件。
DeleteFolder方法使你可以刪除文件夾和文件夾下的所有文件。DeleteFolder需要一個(gè)單獨(dú)
的參數(shù):文件夾的完全路徑。例如下面腳本用來刪除C:\FS0和其它所有的東西。
1SetobjFSO=CreateObject(^Scripting.FileSystemObject^)
2objFSO.DelctcFoldcr(*C:\FS0O
這個(gè)方法會(huì)立即刪除所有的文件,它不會(huì)讓你確認(rèn)是否需要?jiǎng)h除就將其扔到垃圾筒。
※使用通配符(Wildcards)刪除文件夾
腳本的最大的?個(gè)優(yōu)點(diǎn)就是作為一個(gè)管理工具,腳本操作可以同時(shí)刪除許多個(gè)項(xiàng)目。例如你
可以用腳本的一個(gè)單獨(dú)的操作就可以刪除所有的文件和文件夾,而不用一個(gè)一個(gè)去刪除了。
FSO允許你用通配符來刪除-一些特定的文件。例如你希望刪除某文件夾下所有以s開頭的
文件夾,這可以用下面的命令來完成。當(dāng)用類似這樣的文件夾結(jié)構(gòu)來運(yùn)行這個(gè)的時(shí)候,那么
文件夾subfoldcrl,subfoldcr2,scripts都會(huì)被刪除。
objFSO.De1etel'o1derCC:\FS0\S**)
下面這個(gè)腳本用來刪除以su開頭的文件夾,就是說subfolderl,Subfolder2會(huì)被刪除。
objFSO.DeleleFolder("C:\FSD\Su*")
通配符只能放在文件路徑的最末尾。
例如如下代碼將通配符放在路徑的中間,會(huì)報(bào)錯(cuò):pathnotfound
objFSO.DeleteFolder(",C:\*\Subfolder1*)
※復(fù)制文件夾及文件夾卜的內(nèi)容
復(fù)制文件夾和文件夾當(dāng)中所有數(shù)據(jù)能力的對(duì)于系統(tǒng)管理任務(wù)來說非常重要。有時(shí)你需要復(fù)制
文件夾來創(chuàng)建備份,在計(jì)算機(jī)A和計(jì)算機(jī)B上有同樣的文件夾,如果計(jì)算機(jī)B意外的down
掉之后,你就不怕數(shù)據(jù)丟失了,在其它的時(shí)候,你或許希望將含有特定文件的文件夾復(fù)制到
很多臺(tái)計(jì)算機(jī)上。用腳本來向各個(gè)計(jì)算機(jī)復(fù)制這個(gè)文件夾比手工復(fù)制高效的多。
1、CopyFolder方法允許你復(fù)制一個(gè)文件夾到另外一個(gè)地方。當(dāng)不用通配符的時(shí)候,這個(gè)
CopyFoldcr的方法和命令Xcopy/E命令一樣:它拷貝所有的文件和子文件夾,包括空的文
件夾。這個(gè)命令需要兩個(gè)參數(shù):源文件夾這個(gè)文件夾可以被確定為本地路徑(C:\Script)
或者為UNC路徑(\\helpdesk\scripts)。目標(biāo)文件夾-》這個(gè)文件夾也可以是本地文件夾和
UNC路徑。如果目標(biāo)文件夾不存在,那么將自動(dòng)創(chuàng)建一個(gè)文件央。此外這個(gè)方法有個(gè)可選的
參數(shù):Overwrite,當(dāng)這個(gè)參數(shù)存在時(shí),默認(rèn)的情況下腳本會(huì)覆蓋已經(jīng)存在的目標(biāo)文件夾。
Note:CopyFoldcr方法會(huì)在遇到錯(cuò)誤時(shí)停止,即使這個(gè)腳本中包含有OnErrorResumeNext
語句。例如你用腳本用來拷貝100的子文件夾,當(dāng)成功拷貝三個(gè)之后,遇到一個(gè)錯(cuò)誤。這時(shí)
腳本會(huì)中止,它不去嘗試剩下的97的文件夾。
在下例中用CopyFolder的方法來復(fù)制文件夾C:\scripts到c:\FS0并且復(fù)寫目標(biāo)文件
夾。注意,這個(gè)的結(jié)果不是C:\ESO\Scripts而是C:\ES0下有和C:\Scripts有同樣的文
件。如果你想更改文件夾叫C:\FSO\Scripis,你應(yīng)該將目標(biāo)文件夾改為C:\FSO\Scripls
1ConstOverWriteEiles=True
2SetobjFSO=CreateObject(*Scripting.FileSystemObject^)
3objFSO.CopyFolder'C:\Scripls","C:\FSO”,OvcrWritcFilcs
Note:因?yàn)檫@個(gè)CopyFolder是一個(gè)單獨(dú)的操作,你沒有辦法來跟蹤它的進(jìn)程。你只是需要
簡(jiǎn)單的等待操作的結(jié)束。如果你想監(jiān)視copy
命令的過程,你應(yīng)該用shell應(yīng)用程序。
※使用通配符(Wildcards)復(fù)制文件夾
用這個(gè)CopyFolder命令也可以拷貝所有文件夾和子文件夾下的文件。這樣可能導(dǎo)致一個(gè)問
題,如果只是想拷貝C:\FS0
下的文件,而不是想拷貝C:\FSO\Subfolderl,C:\FS0\Subfolcer2,C:\FS0\Sbufolder3下
的文件。
可是,不幸的是這里沒有直接的辦法來不拷貝子文件夾中的文件而只是拷貝父文件夾中的文
件,你可以用通配符來限制子文件夾的拷貝。例如如卜的腳本代碼只是拷貝以log
字母開頭的文件夾。但是,你用通配符的時(shí)候就只是拷貝那些符合特定要求的文件夾才被拷
貝:
objFSO.CopyFolder"C:\Scripls\Log*","C:\Archive”,True
當(dāng)上面的腳本代碼執(zhí)行的時(shí)候,C:\Scripts\logs,C:\Scripts\Logfiles被拷貝了,包括它
們的文件和子文件夾中的文件,但是,在
C:\Scripts的文件沒有被拷貝。當(dāng)你用CopyFolder
方法的時(shí)候,你不能只是拷貝文件夾中的文件,而不拷貝子文件夾中的蚊子。如果你想只是
拷貝文件而不拷貝子文件夾的文件,你可以應(yīng)用CopyEile方法。
※移動(dòng)文件夾
當(dāng)你復(fù)制一個(gè)文件夾從一個(gè)地方到另外一個(gè)地方的時(shí)候,你以身制結(jié)束而告終。有時(shí)候這個(gè)
正是你想要的,但是有的時(shí)候,你不需要兩份文件的信息,你或許希望將文件夾從計(jì)鳧機(jī)
A移動(dòng)到計(jì)算機(jī)B,或者從硬盤C移動(dòng)到硬盤
D。移動(dòng)工作總會(huì)移動(dòng)到特定磁盤的剩余空間上。例如你或許會(huì)周期的將很少訪問的文件夾移
動(dòng)到存檔磁盤中。此外你或許有一個(gè)腳本來監(jiān)視本地計(jì)算機(jī)的信息,當(dāng)監(jiān)視結(jié)束的時(shí)候,你
需要將它上傳到服務(wù)器,然后將本地文件刪除,然后本地計(jì)算機(jī)就開始下一次的監(jiān)視。
MoveFolder需要兩個(gè)參數(shù):
1、Sourcefolder源文件夾,可以是本地路徑或者是UNC路徑。
2、Destinationfolder目標(biāo)文件夾,這個(gè)文件系也可是本地或者UNC路徑。
如果你的目標(biāo)文件夾不存在,那么移動(dòng)是成功的。如果目標(biāo)文件夾存在,那么不成功。你不
能用這個(gè)MoveFolder的方法來覆蓋一個(gè)文件夾。下例股本中,移動(dòng)本地的文件夾
C:\Scripts到?個(gè)共享的文彳匕夾\\helpdesk\management
1SetobjFSO=CreateObject(*Scripting.FileSystemObject*)
2objFSO.MoveFolder"C:\Scripts","\\helpdesk\management”
注意用MoveFolder
方法當(dāng)腳本失敗后不能循環(huán)操作。例如,假如你的網(wǎng)絡(luò)連接在腳木符文件從一個(gè)計(jì)算機(jī)移動(dòng)
到另外一個(gè)計(jì)算機(jī)完成前失敗了,那么很有可能你一些文件在計(jì)算機(jī)A上,另外一些文件在
計(jì)算機(jī)B上,也有可能在移動(dòng)的過程中丟失一些文件。因?yàn)檫@個(gè)MoveFoldcr的方法無法讓
腳本恢復(fù)到以前狀態(tài)。
因?yàn)槿绱耍慊蛟S需要兩個(gè)方法來完成文件在網(wǎng)絡(luò)中的移動(dòng):CopyFoldcr和DclelcFoldcr。
你可以用CopyFolder來將文件從計(jì)算機(jī)A移動(dòng)到計(jì)算機(jī)B。當(dāng)復(fù)制的操作結(jié)束之后,你用
DeleteF'older來刪除計(jì)算機(jī)A上的文件,當(dāng)復(fù)制操作失敗的時(shí)候,你可以確保你的文件還
在你的計(jì)算機(jī)上。
※重命名文件夾
在FSO中沒有提供RenameFolcer方法重新命名文件夾。但是瓦以用
MoveFolder方法來將文件夾移動(dòng)到相對(duì)同樣的位置,例如假如有文件夾路徑如下:
C:\Scripts\PcrformanccMoniloring\Scrvers\DomainControllcrs\CurrentLogs
如果你用Windows瀏覽器來更改文件夾的名字,那么文件夾還是它本身
C:\Scripts\PerformanceMonitoring\Servers\DomainContro11ers\ArchivedLogs
MoveFolder的方法可以讓你完成同樣任務(wù),你將
C:\Scripts\PerformanceMonitoring\Servers\DomainControllers\CurrentLogs作為源路
徑,將C:\Scripts\PerformanceMonitoring\Servers\DomainControllers\ArchivedLogs
作為目標(biāo)路徑。這樣的結(jié)果和在windows瀏覽器中更改文件夾的名字效果是樣的。
例如,下例中的腳本將文件夾C:\FSO\Samples更改為C:\FSO\Scripts在腳本運(yùn)行之前,
Sample是C:\Scripts的文件夾,在腳本運(yùn)行之后,就是C:\FS0的子文件夾了。此外Scripts
(FSO下的)含有原來Sample
所有的文件和子文件。
1SetobjFSO=CreateObject(*Scripting.FileSystemObject*)
2objFSO.MoveFolder"C:\FSO\Samples","C:\FSO\Scripts”
※獲得文件夾屬性
因?yàn)槲募A是一個(gè)COM對(duì)象,它們的屬性可以被獲得和列舉出來,為/列舉詳細(xì)的文件夾信
息,你可以用文件夾對(duì)象,它是FSO
的組件之一。文件夾對(duì)象的屬性列舉在了下表中。
Attributes關(guān)于文件夾的屬性信息。
DateCrcated文件夾創(chuàng)建的日期
DateLastAccessed用戶最后訪問這個(gè)文件夾的日期
DateLastModified用戶最后更改文件夾屬性的日期
Drive磁盤信息包括拖尾符號(hào)(比如,C:)標(biāo)識(shí)文件夾所在的磁盤
Files存儲(chǔ)在這個(gè)文件夾中所有文件的信息。
IsRootFolderBoolean值來表明這個(gè)文件夾是否是根文件夾
Name文件夾的名字但不包括路徑信息
ParentFolder文件夾存放的父文件夾的名字
PropertyDescription
Path文件夾的路徑
ShortNameMS-DOS類型的文件夾的名字,遵循8.3的命名規(guī)則。
ShortPathMS-DOS類型的文件夾的名字,遵循8.3的命名規(guī)則。
Size文件夾的大小,單位是bytes,包含子文件和子文件夾的大小在內(nèi)。
SubFolders第?層的子文件夾。在Subfolders中的子文件夾不在此列中。
Type對(duì)于文件夾的描述
※列舉文件夾的屬性
為了得到一個(gè)文件夾的屬性,一個(gè)腳本必須:
1.創(chuàng)建一個(gè)FSO實(shí)例
2.用GetFolder的方法綁定特定文件夾
3.用Echo的方法顯示屬性。
當(dāng)你對(duì)一個(gè)文件夾的屬性進(jìn)行操作的時(shí)候,注意文件的屬性和子文件夾的屬性是以集合的形
式返回的,不是單獨(dú)返回一個(gè)的。此外Attributes屬性返回一個(gè)屬性值。
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)支持屬性的定義。就是文件夾中和文件夾名字和文件夾大小無關(guān)的信息。例如如果
你在Windows瀏覽器中右擊某個(gè)數(shù)據(jù)夾的時(shí)候,點(diǎn)Properties你就可以訪問文件夾的屬性
了。
FS0可以返回幾個(gè)關(guān)于文件夾信息的重要屬性。這些屬性和相應(yīng)的值,列舉在下表中:
Hidden2隱藏,就是在Windows瀏覽器口不可見
System4表示它是一個(gè)系統(tǒng)文件夾。建議不要更改系統(tǒng)文件夾的內(nèi)容。
Directory16應(yīng)用到所有的文件夾的標(biāo)準(zhǔn)值。所有可以被FSO訪問的文件
夾讀有這個(gè)值,最小位16。
Archive32存盤的屬性用在備份程序中,用來決定文件是否需要備份。
如果這個(gè)值enabling表示文件夾在卜.一次增量備份中會(huì)備份。如果
是disabling表示不在下一次增量備份中備份
Compressed2048友明這個(gè)文件夾是否是壓縮的
雖然這些看起來很簡(jiǎn)單,但是從
FS0返回的數(shù)據(jù)看起來會(huì)讓你感到很迷惑。例如,你返回一個(gè)文件夾的屬性值,你或許會(huì)看
到20,但是這個(gè)值并不是像上面一樣的標(biāo)準(zhǔn)值。此外,你可能會(huì)獲得一個(gè)單獨(dú)的值,雖然這
個(gè)文件夾有說有的屬性。這種情況是,腳本并不是返回如
2,4,16,32,2048這樣的值,而只是返回一個(gè)2102。這是因?yàn)檫@些值是以位圖的形式顯示的。
Note:對(duì)于屬性值,它返回和存儲(chǔ)的數(shù)據(jù)是以位圖的形式的。對(duì)于位圖你應(yīng)該不會(huì)奇怪,比
如后綴名為.bmp的圖形文件
位圖看起來就是一系列的開關(guān),如果特定的開關(guān)是關(guān)閉的,那么這個(gè)開關(guān)的值就是0,如果
是開啟的,比如文件夾對(duì)象吧,它就具有上表中所列出的值。而位圖的值就是這些開關(guān)的值
的總和。如果你用腳本查詢這個(gè)文件夾的屬性,腳木就返I可一個(gè)值為16.
與其相反,如果有三個(gè)開關(guān)是開啟的:隱藏(值是2),Directory(值是16),壓縮(值是2048).
那么這個(gè)位圖的值應(yīng)該是2+15+2048,或者值是2066。這個(gè)也是用腳本查詢的時(shí)候返回的值。
位圖被設(shè)計(jì)成只是有一種辦法來獲取特定的值。得到值2066的方法只有一個(gè)就是壓縮和隱
藏.你不可能通過別的數(shù)學(xué)方法來算得這樣的值。
這個(gè)設(shè)計(jì)可以返回值并且決定哪個(gè)開關(guān)沒有開哪個(gè)沒有開。這個(gè)可以允許你來判斷文件夾的
哪個(gè)屬性設(shè)定了。如果你得到了這個(gè)2066
的值,那么它的屬性就是隱藏壓縮的文件夾。幸運(yùn)的是,你不必去作任何單獨(dú)的數(shù)字運(yùn)算,
你可以用邏輯與AND操作來決定哪個(gè)開關(guān)是否是on還是off。例如如下代碼查詢文件夾是
否是隱藏的,如果是回顯一個(gè)信息框:Hiddenfolder
IfobjFolder.AttributesAND2Then
Wscript.Echo"Hiddenfolder.z,
EndIf
或者:IfobjFolder.AttributesAND16Then
下列腳本先綁定文件夾C:\FS0,然后回顯文件夾屬性:
(譯者注:這個(gè)其實(shí)是挨個(gè)匹配的,所以你耍是測(cè)試/兩個(gè)屬性,它都會(huì)顯示出來的。)
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
※改變文件夾屬性
文件夾的每個(gè)屬性可以看成一個(gè)個(gè)開關(guān),如果關(guān)于隱藏的開關(guān)是ON的,那么這個(gè)文件夾就
是隱藏的,如果這個(gè)開關(guān)是0即
的,那么這個(gè)文件夾就不是隱藏的,你可以選擇打開或者關(guān)掉它們,對(duì)于文件夾的屬性也是
如此:對(duì)于其它的開關(guān),你可以將屬性設(shè)置為開或者設(shè)置為關(guān),你可以用腳本來控制這些開
關(guān)的,最簡(jiǎn)單的控制屬性開關(guān)的辦法是用如卜?的程序:
1.用GetFolder的方法來綁定到一個(gè)文件夾。
2.檢查你需要更改的值。例如你想隱藏一個(gè)文件夾,看這個(gè)文件夾是否是已經(jīng)隱藏了
3.如果這個(gè)文件夾是隱藏的,用XOR操作來將開關(guān)轉(zhuǎn)換成非隱藏的。如果這個(gè)文件夾不是
隱藏的,注意不要用
XOR,如果你用了,開關(guān)會(huì)被觸發(fā),文件夾會(huì)中止于隱藏。例如,下列腳本用AND來判斷文
件夾C:\FS0的隱藏屬性開關(guān)是否開著。如果它是開的,腳本用X0R
操作來將開關(guān)關(guān)閉來顯示文件夾。
1SetobjFSO=CreateObject(^Scripting.FileSystemObject/7)
2SetobjFolder=objFSO.GetFolder("C:\FS0")
3IfobjFoldcr.AttributesAND2Then
4objFolder.Attributes=objl'older.AttributesXOR2
5EndIf
除非很少的一些情況以外,文件夾用來作為單獨(dú)存放文件的地方。有時(shí)候,這些文件夾是系
統(tǒng)需要的。例如操作系統(tǒng)希望在特定的文件夾內(nèi)找到特定的文件。在其它的?些時(shí)候,文件
夾是系統(tǒng)管理員管理計(jì)算機(jī)的一種工具也是用戶管理文件的工具。系統(tǒng)管理員可能希望將腳
本放在叫做Scripts
的文件夾,將一些trouble-shooting的工具放在叫做DiagnosticTools的文件夾。用戶
或許將他們預(yù)算信息放在叫做Budgets
的文件夾,而將薪水的信息放在叫做Timecards
的文件夾。當(dāng)然,文件夾一般是限制使用的,你必須知道這個(gè)文件夾是存放的是什么文件。
系統(tǒng)管理員需要知道是不是有個(gè)特定的腳本存在C:\Scripts文件夾中,用戶需要知道是不
是有個(gè)特定的窗體存在C:\Budgcts的文件夾中。文件夾對(duì)象包含了一些屬性可用來返回存
儲(chǔ)在文件夾內(nèi)文件集合的信息,為了得到這些信息,你的腳本必須:
1.創(chuàng)建一個(gè)FSO對(duì)象實(shí)例。
2.用GetFolder的方法來綁定到一個(gè)適當(dāng)?shù)奈募A。
3.設(shè)置一個(gè)對(duì)象reference來指向文件夾的屬性
4.用ForEach循環(huán)來列舉出所有的文件和他們的屬性。腳本不必去綁定到每一個(gè)單獨(dú)的文
件去獲得文件的信息。
在卜列腳本中返回在文件夾C:\FS0卜所有文件的信息并且回顯他們的名字和大小:
1SetobjFSO=CreateObject(^Scripting.FileSystemObject/,)
2SetobjFolder=objFS。.GetFolder("C:\FS0")
3SetcolFiles=objFolder.Files
4ForEachobjFileincolFiles
5Wscript.EchoobjFile.Name,objFile.Size
6Next
對(duì)于大多數(shù)返回的集合來說,你不能控制輸出信息的順序。就是說你不能將輸出的格式定義
為按照名字,按照大小或者其它別的原則。如果你想讓輸出的東西按照特定的格式,你就必
須將他們拷貝到數(shù)組,目錄或者一個(gè)disconnectedrecordset然后將他們分類排列。
?VBS腳本運(yùn)行庫(kù)手冊(cè)之三一一子文件夾
為了需要知道文件夾中存放的文件,你需要知道文件夾子文件夾,這樣,你才能更好的了解
文件夾的整體結(jié)構(gòu)。文件夾對(duì)象包含了一個(gè)Subfolders屬性,用來放會(huì)在文件夾下的
top-level子文件夾的信息。
Top-level子文件夾是直接在文件夾下面的。在子文件夾中的子文件夾不在這個(gè)范圍之內(nèi)。
例如,在下例中,只有SubfolderlSubfolder2
是文件夾scripts的lopTcvcl的子文件夾。所以,如果用Subfolders這個(gè)屬性來返回
值的話,就只是會(huì)返回Subfolderl和Subfolder2
為了得到一個(gè)子文件夾的集合,你的腳本必須:
1.創(chuàng)建一個(gè)FSO實(shí)例
2.用GetFolder的方法綁定到一個(gè)文件夾。
3.創(chuàng)建一個(gè)對(duì)象reference來表示Subfolders屬性。這個(gè)是一個(gè)集合對(duì)象,因?yàn)樗?/p>
很多個(gè)對(duì)象。
在得到了對(duì)象reference這樣一個(gè)集合之后,你可以用一個(gè)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)的設(shè)計(jì)有關(guān),有時(shí)知道top-level
的了?文件夾就可以提供足夠的文件夾結(jié)構(gòu)的信息。在多數(shù)文件系統(tǒng)中,文件夾是嵌套的,或
者是被嵌套的。關(guān)于子文件夾的集合可以告訴你C:\Accounting包含兩個(gè)子文件夾2001、
2002,但是它不能告訴你他們的子文件夾的信息。
幸運(yùn)的是,你可以用遞歸來杳詢一系列子文件夾的的信息。例如用Subfolders屬性返回了
一些top-level的子文件夾:
為返回完整的一系列子文件夾的信息、,你需要用遞歸函數(shù)。這個(gè)函數(shù)用來調(diào)用它自己。下面
腳本可以列舉出文件夾的所有子文件夾:
1.創(chuàng)建一個(gè)FSO對(duì)象實(shí)例
2.用GetFolder的方法來綁定到文件夾C:\Scripts.GetFolder的方法用來返回文件夾對(duì)
象C:\Scripts.然后這個(gè)
C:\Scripts作為遞歸了一函數(shù)ShowSubPolders的參數(shù)。這個(gè)子程序會(huì)列舉出所有的
C:\Scripts下的子文件夾。返回一個(gè)包含在
C:\Scripts下所有子文件夾的信息。這個(gè)集合有兩個(gè)值:Subfolderlfl!Subfolder2.
4.返回第一個(gè)參數(shù)的路徑Subfolder]。這個(gè)子程序用這個(gè)來作為參數(shù)將它輸入給它自身。
換句話說,腳本現(xiàn)在調(diào)用ShovSubFolders,并且參數(shù)是Subfolderlo
5.返回在Subfolderl中的所有參數(shù)。這個(gè)集合有兩個(gè)值:SubfolderlAandSubfolderIB.
6.回顯第一個(gè)集合的路徑,SubfolderlAo子程序用這個(gè)來作為參數(shù)調(diào)用自日。換句話說,
就是用ShowSubFolders這個(gè)函數(shù),那么它的參數(shù)是SubfolderlA來作參數(shù)。
7.繼續(xù)執(zhí)行下一個(gè)參數(shù)。因?yàn)樵赟ubfolderlA中沒有了子文件夾。這個(gè)子程序用
SubfoldcrlB作為參數(shù)。
8..完成了關(guān)于文件夾Subfolderl的循環(huán)。這個(gè)過程結(jié)束在SubfolderlB沒有子文件夾。
腳本然后用Subfolder2
來作為參數(shù),并且用行上面整個(gè)過程。
1SetFSO=CreateObject(*Scripting.FileSystemObject,,)
2ShowSubFoldersFSO.GetFolder("C:\Scripls")
3SubShowSubFoldcrs(Folder)
4EorEachSubfolderinFolder.SubFolders
5Wscript.EchoSubfolder.Path
6ShowSubFoldcrsSubfolder
7Next
8EndSub
當(dāng)用CScripl運(yùn)行的時(shí)候,命令行中顯示如下:
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腳本運(yùn)行庫(kù)手冊(cè)之四一一管理文件
ManagingFiles
管理文件系統(tǒng)的最終任務(wù)還是歸結(jié)為管理單獨(dú)的文件。作為一個(gè)系統(tǒng)管理員,你的工作是跟
蹤存儲(chǔ)在計(jì)算機(jī)上的文件。例如,你需要知道正確的診斷工具是否被克制到「server上,
你需要知道特定的文件(比如游戲文件或者音樂文件)是否被復(fù)制到了文件服務(wù)器上了,盡
管你用了組策略去阻止他們將文件拷貝到文件的server。你需要知道是否有的文件放在計(jì)算
機(jī)上已經(jīng)有幾個(gè)月沒有去訪問了,而這些功能通過類似知道磁盤的剩余空間這樣的操作是無
法知道的。此外為了跟蹤這些文件,你也需要?jiǎng)討B(tài)的管理他們:需要復(fù)制,需要移動(dòng),需要
重新命名,需要?jiǎng)h除。FSO提供了一些方法來幫助你完成這些管理任務(wù)。
BindingtoaFile
FSO給你提供了一些方法,比如CopyFile,DeleteFile
允許你的腳本不用綁定一個(gè)特定的文件就可以對(duì)文件實(shí)例進(jìn)行操作。而其它的任務(wù),就需要
文件對(duì)象。比如,為了獲得一些屬性,你的腳本首先就需要綁定到?個(gè)文件,然后再獲得文
件的屬性。GetFile方法允許你綁定到一個(gè)獨(dú)立的文件。為了做到這點(diǎn),你先創(chuàng)建一個(gè)FSO實(shí)
例,然后創(chuàng)建一個(gè)文件對(duì)象。當(dāng)你用GetFile方法的時(shí)候,你必須:1、確定文件的路徑:
這個(gè)路徑可以是一個(gè)本地路徑,也可以是一個(gè)UNC路徑(例如:
\\accounting\receivables\scriptlog.txt)在路徑當(dāng)中你不能用通配符也不能有多個(gè)文件。
用GetFile方法你在同一個(gè)時(shí)刻只能綁定一個(gè)單獨(dú)的文件。2、當(dāng)綁定的對(duì)象分配給一個(gè)變
量的時(shí)候就要用到Set這個(gè)關(guān)鍵詞。
例如,卜,面腳本綁定到了文件:C:\FSO\Scripllog.1x1
1SetobjFSO=CreateObject(*Scripting.FileSystemObject*)
2objFSO.GetFile(,zC:\FSO\ScriptLog.txt*)
一般來講,你最好用絕對(duì)路徑來作GetFile的參數(shù)。這樣確保腳本總是可以在文件中運(yùn)行。
但是,用相對(duì)路徑也是可以的,例如,如下的腳本代碼會(huì)綁定到
Scripllog.txt會(huì)成功,因?yàn)槟_本和這個(gè)文件在同一個(gè)文件夾旦面:
objFSO.GetEile(*ScriptLog.txt*)
同樣,下面的代碼實(shí)例如果這個(gè)腳本和這個(gè)文件在同-一個(gè)文件夾也會(huì)綁定到Scriptlog.txt:
objFSO.GetFile(*.\ScriptLog.txt*)
注意:FSO不會(huì)用路徑環(huán)境信息去搜索文件。例如,你可以在命令行中敲如calc.exe來打
開計(jì)算機(jī),而無論你當(dāng)前的目錄是在哪里,因?yàn)椴僮飨到y(tǒng)默認(rèn)的情況下去搜索所有的文件的。
但是用這個(gè)GetFile方法的時(shí)候,它不是這樣的工作的。
如卜腳本除非是在文件夾C:\Windows\System32的文件夾下,否則都不會(huì)運(yùn)行成功的。
objFSO.GetFile("calc.exe")
有時(shí)知道文件是否存在是十分重要的,這個(gè)可以作為軟件清單的?部分。例如你或許希望檢
查所有的郵件服務(wù)器來看特定的腳本是否存在。用腳本來實(shí)現(xiàn)系統(tǒng)管理任務(wù)來說,知道腳本
存在與否很重要的。比如你或許希望當(dāng)你復(fù)制、移動(dòng)、刪除或者操作不存在的文件的時(shí)候,
腳本報(bào)錯(cuò)。為了避免出現(xiàn)錯(cuò)誤,你可以用FileExists方法來檢杳文件是否存在。FileExists
方法要求一個(gè)單獨(dú)的參數(shù):文件的路徑,然后返回一個(gè)特定的Boolean值:如果文件存在,
返回的是True,如果文件不存在,返回的是False。
如下面腳本用FileExists方法來檢查文件C:\FSO\Scripilog.txt是否存在,如果存在,
用GetFile方法來綁定到這個(gè)文件,如果不存在,腳本回顯一個(gè)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\下存在多少文件,都不會(huì)報(bào)錯(cuò)出來,而是總是返回一個(gè)False.
WScript.EchoobjFSO.FileExists(*C:\FS0\*.*")
如果你希望遵循一些條件原則檢行一些文件而不是基于路徑,你有下面兩個(gè)選擇:
1、用GetFolder
對(duì)象來綁定一個(gè)文件夾,然后返回文件的屬性,這樣重復(fù)操作直到篩選出你感興趣的。例如,
你可以列舉出所有的文件和文件的擴(kuò)展名,然后跟蹤看有多少個(gè)后綴名
為.doc的文件。
2、用m,它允許你創(chuàng)建更多的Fl標(biāo)查詢。比如選出所有后綴名為.doc的文件。你可以用
計(jì)數(shù)的辦法來返回你要的特定為條目。如果數(shù)值是0,那么,最少有一個(gè)是.doc的文件。
DeletingaFile
用FS0來創(chuàng)建腳本刪除文件讓你可以自動(dòng)執(zhí)行類似與磁盤清理之類的操作。例如,你可以用
腳本定期查詢和刪除所有的臨時(shí)文件。你也可以依照一些規(guī)則來刪除文件,比如刪除六個(gè)月
都沒有被訪問的文件,或者特定的后綴名的文件,比如(.bmp或者.mp3)你可以首先創(chuàng)建FS0
對(duì)象實(shí)例,然后調(diào)用DcleteFile方法來刪除文件,輸入文件路徑作為參數(shù)。
如下面腳本刪除了文件C:\FSD\Scriptlog.txt
1SetobjFSO=CreateObject(^Scripting.Fi]eSystemObjectz,)
2objFSO.DclctcFilcrC:\FSO\ScriptLog.txt*)
默認(rèn)的情況下,DeleteFile方法不會(huì)刪除只讀文件。事實(shí)上,當(dāng)你嘗試刪除一個(gè)只讀文件時(shí),
腳本會(huì)報(bào)錯(cuò)出來。為了避免這樣的錯(cuò)誤出現(xiàn),如想刪除只讀文件的話,需添加強(qiáng)制參數(shù),當(dāng)
強(qiáng)制參數(shù)設(shè)成True
的時(shí)候,那么DelcteFile可以刪除任何文件。如下面這行代碼可以刪除文件
Scriptlog.txt,即使它只是一個(gè)只讀文件。
1、objFSO.DclctcFilcC^C:\FSO\ScriptLog.txt*,True)
2、DeletingaSetofFiles
有時(shí)候你希望刪除特定的、單獨(dú)的文件。更有可能的是你可能想用腳本來刪除一系列的文件。
如在周末你或許想刪除一些存盤了的日志文件或所有的臨時(shí)文件。你可以通過通配符來刪除
一個(gè)文件夾之內(nèi)的一些文件。但是你不能用DcleteFile方法來直接刪除多個(gè)文件夾內(nèi)部的
文件。你可以通過用篩選每個(gè)數(shù)據(jù)夾的辦法來逐個(gè)刪除每個(gè)文件夾內(nèi)部的文件。如果你想刪
除多個(gè)文件夾內(nèi)部的特定類型的文件(比如刪除計(jì)算機(jī)上全部的.TMP文件)你應(yīng)該用m而
不是用FS0o為了刪除一系列文件,調(diào)用DcleteFile方法,杈據(jù)文件的名字或者后綴名添
加通配符來提供文件夾的路徑,例如,下面的代碼用來刪除文件夾C:\FSO文件夾下
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 遼寧省葫蘆島市2025-2026學(xué)年高二上學(xué)期1月期末考試化學(xué)試卷(含答案)
- 湖南省湘潭市2026屆高三上學(xué)期二模地理試卷(含答案)
- 甘肅省天水市清水縣多校聯(lián)考2025-2026學(xué)年高一上學(xué)期1月期末考試語文試卷(含答案)
- 飛行員心理安全培訓(xùn)課件
- 陶瓷制品公司管理制度
- 2026年上半年黑龍江事業(yè)單位聯(lián)考七臺(tái)河市招聘132人參考考試題庫(kù)及答案解析
- 市場(chǎng)營(yíng)銷策劃公司安全管理責(zé)任制度
- 中央財(cái)經(jīng)大學(xué)法學(xué)院、紀(jì)檢監(jiān)察研究院2026年度人才招聘?jìng)淇伎荚囋囶}及答案解析
- 2026年臨沂蘭陵縣部分事業(yè)單位公開招聘綜合類崗位工作人員(34名)參考考試題庫(kù)及答案解析
- 熱學(xué)實(shí)驗(yàn)室管理制度(3篇)
- 2026年小學(xué)說明文說明方法判斷練習(xí)題含答案
- 中國(guó)監(jiān)控管理制度規(guī)范
- 2026年工程法律顧問高級(jí)面試含答案
- 煤礦安全操作規(guī)程課件
- 2026年醫(yī)療器械不良事件分析報(bào)告
- 通信網(wǎng)絡(luò)設(shè)備安裝與調(diào)試指南(標(biāo)準(zhǔn)版)
- 二年級(jí)??级鄨D版看圖寫話專項(xiàng)訓(xùn)練29篇(含范文)
- 醫(yī)院物資采購(gòu)管理流程及規(guī)范
- 風(fēng)電場(chǎng)運(yùn)維安全責(zé)任書2025年版
- 浙江省杭州市上城區(qū)2024-2025學(xué)年七年級(jí)上學(xué)期語文1月期末試卷(含答案)
- 【普通高中地理課程標(biāo)準(zhǔn)】日常修訂版-(2017年版2025年修訂)
評(píng)論
0/150
提交評(píng)論