PowerShell设置文件只读、隐藏属性的方法
程序员文章站
2022-05-31 11:40:56
本文介绍一个powershell中如何设置文件属性。我们知道文件的属性有只读、隐藏、系统、存档和无内容索引等5个,只读和隐藏用得比较多,另外三个用得比较少。
一、文件的属...
本文介绍一个powershell中如何设置文件属性。我们知道文件的属性有只读、隐藏、系统、存档和无内容索引等5个,只读和隐藏用得比较多,另外三个用得比较少。
一、文件的属性
不知道大家有没有用过attrib.exe这个cmd下的小程序,它可以用来设置文件的属性。建议大家先去了解一下这个attrib小程序。可以参考文章:
下面我们来看看如何在powershell中设置文件只读、隐藏和系统属性。
我们知道,获取一个文件对象可以使用get-item这个cmdlet。但我们来看看下面的操作:
复制代码 代码如下:
ps c:\users\splaybow> get-item d:\2.txt
get-item : 找不到项 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
get-item : 找不到项 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
这个提示似乎很明确的告诉我们,找不到d:\2.txt这个文件。真的没有这个文件吗?不是的!这个文件之前被我设置了隐藏属性的系统属性,待我把它去掉试试。
复制代码 代码如下:
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
这下子就找到该文件了。另外,大家可以出输出结果中看到mode这部分,“ar”表示,该文件上还有存档属性和只读属性。我们也可以通过下面的命令来查看文件的属性:
复制代码 代码如下:
ps c:\users\splaybow> $file = get-item d:\2.txt
ps c:\users\splaybow> $file.mode
-ar--
关于文件的五种属性,洪哥就不再介绍了,有兴趣的朋友可以参考attrib的那篇文章。
二、设置文件属性
现在我们测试去掉文件上的只读属性,要用到文件对象的isreadonly属性。
复制代码 代码如下:
ps c:\users\splaybow> $file.isreadonly = $false
ps c:\users\splaybow> $file.mode
-a---
从这个结果上看,是不是r(只读)没有了?!要想重新加回来,再把isreadonly设置为$true即可。
聪明如洪哥者,一定会想,隐藏属性是不是可以通过$file对象的ishidden来控制呢?呵呵,我们想错了。要想知道$file对象有哪些属性和方法,可以使用“$file | get-member”这个命令来查看。当然,任何对象,我们想知道它有哪些方法和属性,都可以通过“<对象变量> | get-memeber”的方式去获取。
不要扯远了,如何设置只读外的其它属性呢,那就只能使用attributes属性了。且看下面的例子:
复制代码 代码如下:
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
上面的例子展示如何设置文件的只读属性、隐藏属性、系统属性、存档属性、无内容索引属性等。需要注意的是mode属性和attributes属性有一点区别,那就是mode中貌似不会显示出无内容存档属性(i)来。
三、修改文件属性
上面讲的是一次性为文件设置一组属性,这样很简单,但也很粗暴。如果只想给他增加一个readonly属性,其它的原属性不变,怎么操作呢?
在powershell中,可以将文件的属性当作一个二进制数组,使用二进制的按位或(bor)操作符来运算一下就好了。且看例子:
复制代码 代码如下:
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
上面例子中,文件本身只有一个隐藏属性,后面给它添加了一个只读属性,结果变更为隐藏、只读双属性。如果是要去掉其中一个属性呢?可惜没有按位非的操作符,怎么实现就留给大家思考。
关于powershell设置文件只读、隐藏和系统属性,本文就介绍这么多,希望对您有所帮助,谢谢!