设为首页 收藏本站
查看: 1767|回复: 0

PowerShell基础教程(23)——处理文件和文件夹

[复制链接]

尚未签到

发表于 2017-5-20 09:34:17 | 显示全部楼层 |阅读模式
PowerShell基础教程(23)——处理文件和文件夹             <o:p></o:p>
   
在 Windows PowerShell 驱动器中导航和操作这些驱动器上的项目,与操作 Windows 物理磁盘驱动器上的文件和文件夹类似。本部分将讨论如何处理特定的文件和文件夹操作任务。
列出文件夹中的所有文件和文件夹<o:p></o:p>
可以使用 Get-ChildItem 获取文件夹中的所有直接项。添加可选的 Force 参数可以显示隐藏项或系统项。例如,以下命令显示 Windows PowerShell 驱动器 C(与 Windows 物理驱动器 C 相同)的直接内容:
Get-ChildItem -Force C:\<o:p></o:p>
<o:p> </o:p>
该命令仅列出直接包含的项,与使用 Cmd.exe 的 DIR 命令或 UNIX 外壳程序中的 ls 非常类似。为了显示包含的项,还需要指定 - Recurse 参数。(这可能需要极长的时间才能完成。)列出 C 驱动器上的所有内容:
Get-ChildItem -Force C:\ -Recurse<o:p></o:p>
<o:p> </o:p>
Get-ChildItem 可以使用其 PathFilterIncludeExclude 参数筛选项,但是这些操作通常仅基于名称。使用 Where-Object,可以基于项的其他属性执行复杂的筛选。
以下命令查找 Program Files 文件夹中上次修改日期晚于 2005 年 10 月 1 日并且既不小于 1 MB 也不大于 10 MB 的所有可执行文件:
Get-ChildItem -Path $env:ProgramFiles -Recurse -Include   *.exe | Where-Object -FilterScript {($_.LastWriteTime -gt   "2005-10-01") -and ($_.Length -ge 1m) -and ($_.Length -le 10m)}<o:p></o:p>
<o:p> </o:p>
复制文件和文件夹<o:p></o:p>
复制是使用 Copy-Item 进行的。以下命令将 C:\boot.ini 备份到 C:\boot.bak:
Copy-Item -Path c:\boot.ini -Destination c:\boot.bak<o:p></o:p>
<o:p> </o:p>
如果目标文件已经存在,则复制尝试将会失败。若要覆盖预先存在的目标,请使用 Force 参数:
Copy-Item -Path c:\boot.ini -Destination c:\boot.bak   -Force<o:p></o:p>
<o:p> </o:p>
甚至在目标为只读时,此命令也有效。
复制文件夹的方法与此相同。以下命令以递归方式将文件夹 C:\temp\test1 复制到新文件夹 c:\temp\DeleteMe:
Copy-Item C:\temp\test1 -Recurse c:\temp\DeleteMe<o:p></o:p>
<o:p> </o:p>
也可以复制所选项。以下命令将 c:\data 中任何位置所包含的所有 .txt 文件复制到 c:\temp\text:
Copy-Item -Filter *.txt -Path c:\data -Recurse   -Destination c:\temp\text<o:p></o:p>
<o:p> </o:p>
仍然可以使用其他工具执行文件系统复制。XCOPY、ROBOCOPY 和 COM 对象(如 Scripting.FileSystemObject)均可以在 Windows PowerShell 中使用。例如,可以使用 Windows Script Host Scripting.FileSystem COM 类将 C:\boot.ini 备份到 C:\boot.bak:
(New-Object -ComObject   Scripting.FileSystemObject).CopyFile("c:\boot.ini",   "c:\boot.bak")<o:p></o:p>
<o:p> </o:p>
创建文件和文件夹<o:p></o:p>
在所有 Windows PowerShell 提供程序中,创建新项的方法都是相同的。如果 Windows PowerShell 提供程序具有多种类型的项(例如,FileSystem Windows PowerShell 提供程序区分目录和文件),则需要指定项类型。
以下命令创建新文件夹 C:\temp\New Folder:
New-Item -Path 'C:\temp\New Folder' -ItemType   "directory"<o:p></o:p>
<o:p> </o:p>
以下命令创建新的空文件 C:\temp\New Folder\file.txt:
New-Item -Path 'C:\temp\New Folder\file.txt' -ItemType   "file"<o:p></o:p>
<o:p> </o:p>
删除文件夹中的所有文件和文件夹<o:p></o:p>
可以使用 Remove-Item 删除包含的项,但是,如果该项包含其他内容,将提示您确认删除。例如,如果尝试删除包含其他项的文件夹 C:\temp\DeleteMe,Windows PowerShell 会在删除该文件夹之前提示您进行确认:
Remove-Item C:\temp\DeleteMe<o:p></o:p>
<o:p> </o:p>
确认<o:p></o:p>
C:\temp\DeleteMe 中的项具有子项,并且没有指定   -recurse 参数。如果继续,所有子项均将随该项删除。是否确实要继续?<o:p></o:p>
[Y]   是  [A] 全是  [N] 否  [L] 全否  [S] 挂起  [?] 帮助<o:p></o:p>
(默认值为“Y”):<o:p></o:p>
<o:p> </o:p>
如果对于每个包含的项不希望被提示,请指定 Recurse 参数:
Remove-Item C:\temp\DeleteMe -Recurse<o:p></o:p>
<o:p> </o:p>
将本地文件夹映射为 Windows 可访问驱动器<o:p></o:p>
也可以使用 subst 命令映射本地文件夹。以下命令创建位于本地 Program Files 目录中的本地驱动器 P::
subst p:$env:programfiles<o:p></o:p>
<o:p> </o:p>
就像网络驱动器一样,使用 subst 在 Windows PowerShell 中映射的驱动器立即对 Windows PowerShell 会话可见。
将文本文件读入数组<o:p></o:p>
文本数据的更常见存储格式之一是,存储在将不同行视为不同数据元素的文件中。可以使用 Get-Content cmdlet 一步读取整个文件,如下所示:
PS> Get-Content -Path C:\boot.ini<o:p></o:p>
[boot loader]<o:p></o:p>
timeout=5<o:p></o:p>
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS<o:p></o:p>
[operating systems]<o:p></o:p>
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft   Windows XP Professional"<o:p></o:p>
/noexecute=AlwaysOff /fastdetect<o:p></o:p>
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="   Microsoft Windows XP Professional <o:p></o:p>
with Data Execution Prevention" /noexecute=optin   /fastdetect<o:p></o:p>
<o:p> </o:p>
Get-Content 已将从文件读取的数据视为一个数组,文件内容的每行上有一个元素。可以通过检查所返回内容的 Length 对此进行确认:
PS> (Get-Content -Path C:\boot.ini).Length<o:p></o:p>
6<o:p></o:p>
<o:p> </o:p>
对于直接从 Windows PowerShell 获取信息列表,此命令是最有用的。例如,可能将计算机名称或 IP 地址的列表存储在文件 C:\temp\domainMembers.txt 中,文件的每行上有一个名称。可以使用 Get-Content 检索文件内容,并将其放置在变量 $Computers 中:
$Computers = Get-Content -Path C:\temp\DomainMembers.txt<o:p></o:p>
<o:p> </o:p>
$Computers 现在是其每个元素中都包含计算机名称的数组。
 

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-379216-1-1.html 上篇帖子: win7自带的正则表达式验证工具----powershell 下篇帖子: PowerShell基础教程(8)——Out-* Cmdlet 重定向数据
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表