本文介紹一個(gè)PowerShell中如何設(shè)置文件屬性。我們知道文件的屬性有只讀、隱藏、系統(tǒng)、存檔和無內(nèi)容索引等5個(gè),只讀和隱藏用得比較多,另外三個(gè)用得比較少。
一、文件的屬性
不知道大家有沒有用過attrib.exe這個(gè)cmd下的小程序,它可以用來設(shè)置文件的屬性。建議大家先去了解一下這個(gè)attrib小程序??梢詤⒖嘉恼拢菏褂胊ttrib設(shè)置文件只讀、隱藏和系統(tǒng)屬性
下面我們來看看如何在PowerShell中設(shè)置文件只讀、隱藏和系統(tǒng)屬性。
我們知道,獲取一個(gè)文件對象可以使用Get-Item這個(gè)cmdlet。但我們來看看下面的操作:
復(fù)制代碼 代碼如下:
PS C:\Users\splaybow> get-item d:\2.txt
Get-Item : 找不到項(xiàng) D:\2.txt。
所在位置 行:1 字符: 9
+ get-item d:\2.txt
+ CategoryInfo : ObjectNotFound: (D:\2.txt:String) [Get-Item], IO
Exception
+ FullyQualifiedErrorId : ItemNotFound,Microsoft.PowerShell.Commands.GetIt
emCommand
這個(gè)提示似乎很明確的告訴我們,找不到D:\2.txt這個(gè)文件。真的沒有這個(gè)文件嗎?不是的!這個(gè)文件之前被我設(shè)置了隱藏屬性的系統(tǒng)屬性,待我把它去掉試試。
復(fù)制代碼 代碼如下:
PS C:\Users\splaybow> attrib -h -s d:\2.txt
PS C:\Users\splaybow> get-item d:\2.txt
目錄: D:\
Mode LastWriteTime Length Name
---- ------------- ------ ----
-ar-- 2013/11/11 20:04 6 2.txt
這下子就找到該文件了。另外,大家可以出輸出結(jié)果中看到Mode這部分,“ar”表示,該文件上還有存檔屬性和只讀屬性。我們也可以通過下面的命令來查看文件的屬性:
復(fù)制代碼 代碼如下:
PS C:\Users\splaybow> $file = Get-Item d:\2.txt
PS C:\Users\splaybow> $file.Mode
-ar--
關(guān)于文件的五種屬性,洪哥就不再介紹了,有興趣的朋友可以參考attrib的那篇文章。
二、設(shè)置文件屬性
現(xiàn)在我們測試去掉文件上的只讀屬性,要用到文件對象的IsReadOnly屬性。
復(fù)制代碼 代碼如下:
PS C:\Users\splaybow> $file.IsReadOnly = $false
PS C:\Users\splaybow> $file.Mode
-a---
從這個(gè)結(jié)果上看,是不是r(只讀)沒有了?!要想重新加回來,再把IsReadOnly設(shè)置為$true即可。
聰明如洪哥者,一定會(huì)想,隱藏屬性是不是可以通過$file對象的IsHidden來控制呢?呵呵,我們想錯(cuò)了。要想知道$file對象有哪些屬性和方法,可以使用“$file | Get-Member”這個(gè)命令來查看。當(dāng)然,任何對象,我們想知道它有哪些方法和屬性,都可以通過“對象變量> | Get-Memeber”的方式去獲取。
不要扯遠(yuǎn)了,如何設(shè)置只讀外的其它屬性呢,那就只能使用Attributes屬性了。且看下面的例子:
復(fù)制代碼 代碼如下:
PS C:\Users\splaybow> $file.Attributes = "Readonly","system","notcontentindexed","hidden","archive"
PS C:\Users\splaybow> $file.mode
-arhs
PS C:\Users\splaybow> $file.Attributes
ReadOnly, Hidden, System, Archive, NotContentIndexed
上面的例子展示如何設(shè)置文件的只讀屬性、隱藏屬性、系統(tǒng)屬性、存檔屬性、無內(nèi)容索引屬性等。需要注意的是Mode屬性和Attributes屬性有一點(diǎn)區(qū)別,那就是Mode中貌似不會(huì)顯示出無內(nèi)容存檔屬性(I)來。
三、修改文件屬性
上面講的是一次性為文件設(shè)置一組屬性,這樣很簡單,但也很粗暴。如果只想給他增加一個(gè)ReadOnly屬性,其它的原屬性不變,怎么操作呢?
在PowerShell中,可以將文件的屬性當(dāng)作一個(gè)二進(jìn)制數(shù)組,使用二進(jìn)制的按位或(bOR)操作符來運(yùn)算一下就好了。且看例子:
復(fù)制代碼 代碼如下:
PS C:\Users\splaybow> $file = Get-Item d:\2.txt
PS C:\Users\splaybow> $file.Attributes="hidden"
PS C:\Users\splaybow> $readonly = [System.IO.FileAttributes] "ReadOnly"
PS C:\Users\splaybow> $file.Attributes=$file.Attributes -bor $readonly
PS C:\Users\splaybow> $file.Attributes
ReadOnly, Hidden
上面例子中,文件本身只有一個(gè)隱藏屬性,后面給它添加了一個(gè)只讀屬性,結(jié)果變更為隱藏、只讀雙屬性。如果是要去掉其中一個(gè)屬性呢?可惜沒有按位非的操作符,怎么實(shí)現(xiàn)就留給大家思考。
關(guān)于PowerShell設(shè)置文件只讀、隱藏和系統(tǒng)屬性,本文就介紹這么多,希望對您有所幫助,謝謝!