当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 处理文件和文件夹

作者:精品下载站 日期:2024-12-14 03:02:07 浏览:15 分类:玩电脑

处理文件和文件夹


浏览 PowerShell 驱动器并操作其上的项目类似于操作 Windows 磁盘驱动器上的文件和文件夹。本文讨论如何使用 PowerShell 处理特定的文件和文件夹操作任务。

列出文件夹内的所有文件和文件夹

您可以使用 Get-ChildItem 直接获取文件夹中的所有项目。添加可选的强制参数以显示隐藏或系统项目。例如,此命令显示 PowerShell 驱动器 C: 的直接内容。

Get-ChildItem -Path C:\ -Force

该命令仅列出直接包含的项目,非常类似于在 UNIX shell 中使用 cmd.exe 中的 dir 命令或 ls 。要显示子文件夹中的项目,您需要指定Recurse参数。以下命令列出了 C: 驱动器上的所有内容:

Get-ChildItem -Path C:\ -Force -Recurse

Get-ChildItem 可以使用其路径过滤器包含排除过滤项目> 参数,但这些参数通常仅基于名称。您可以使用 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 1mb) -and ($_.Length -le 10mb)
    }

复制文件和文件夹

复制是通过Copy-Item完成的。以下命令备份您的 PowerShell 配置文件脚本:

if (Test-Path -Path $PROFILE) {
    Copy-Item -Path $PROFILE -Destination $($PROFILE -replace 'ps1$', 'bak')
}

Test-Path 命令检查配置文件脚本是否存在。

如果目标文件已存在,则复制尝试失败。要覆盖预先存在的目标,请使用Force参数:

if (Test-Path -Path $PROFILE) {
    Copy-Item -Path $PROFILE -Destination $($PROFILE -replace 'ps1$', 'bak') -Force
}

即使目标是只读的,该命令也可以工作。

文件夹复制的工作方式相同。此命令递归地将文件夹 C:\temp\test1 复制到新文件夹 C:\temp\DeleteMe

Copy-Item C:\temp\test1 -Recurse C:\temp\DeleteMe

您还可以复制选定的项目。以下命令将 C:\data 中任意位置包含的所有 .txt 文件复制到 C:\temp\text

Copy-Item -Filter *.txt -Path c:\data -Recurse -Destination C:\temp\text

您仍然可以运行 xcopy.exerobocopy.exe 等本机命令来复制文件。

创建文件和文件夹

创建新项目的方式在所有 PowerShell 提供程序上都是相同的。如果 PowerShell 提供程序具有不止一种类型的项目(例如,文件系统 PowerShell 提供程序区分目录和文件),您需要指定项目类型。

此命令创建一个新文件夹 C:\temp\New Folder

New-Item -Path 'C:\temp\New Folder' -ItemType Directory

此命令创建一个新的空文件 C:\temp\New Folder\file.txt

New-Item -Path 'C:\temp\New Folder\file.txt' -ItemType File

这很重要

当使用 Force 开关和 New-Item 命令创建文件夹时,如果该文件夹已存在,则它不会覆盖或替换文件夹。它只会返回现有的文件夹对象。但是,如果您对已存在的文件使用New-Item -Force,该文件将被覆盖。

删除文件夹内的所有文件和文件夹

您可以使用 Remove-Item 删除包含的项目,但如果该项目包含其他内容,系统将提示您确认删除。例如,如果您尝试删除包含其他项目的文件夹 C:\temp\DeleteMe,PowerShell 会在删除该文件夹之前提示您确认:

Remove-Item -Path C:\temp\DeleteMe
Confirm
The item at C:\temp\DeleteMe has children and the Recurse parameter wasn't
specified. If you continue, all children will be removed with the item. Are you
sure you want to continue?
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help
(default is "Y"):

如果您不希望系统提示您输入每个包含的项目,请指定 Recurse 参数:

Remove-Item -Path C:\temp\DeleteMe -Recurse

将本地文件夹映射为驱动器

您还可以使用 New-PSDrive 命令映射本地文件夹。以下命令创建一个以本地 Program Files 目录为根的本地驱动器 P:,仅在 PowerShell 会话中可见:

New-PSDrive -Name P -Root $env:ProgramFiles -PSProvider FileSystem

与网络驱动器一样,PowerShell 中映射的驱动器对 PowerShell shell 立即可见。要创建从文件资源管理器可见的映射驱动器,请使用持久参数。但是,只有远程路径可以与持久一起使用。

将文本文件读入数组

文本数据更常见的存储格式之一是在文件中,其中单独的行被视为不同的数据元素。 Get-Content cmdlet 可用于一步读取整个文件,如下所示:

Get-Content -Path $PROFILE
# Load modules and change to the PowerShell-Docs repository folder
Import-Module posh-git
Set-Location C:\Git\PowerShell-Docs

Get-Content 将从文件读取的数据视为一个数组,每行文件内容一个元素。您可以通过检查返回内容的长度来确认这一点:

PS> (Get-Content -Path $PROFILE).Length
3

此命令对于将信息列表获取到 PowerShell 中最有用。例如,您可以将计算机名称或 IP 地址列表存储在文件 C:\temp\domainMembers.txt 中,文件的每一行都有一个名称。您可以使用 Get-Content 检索文件内容并将其放入变量 $Computers 中:

$Computers = Get-Content -Path C:\temp\DomainMembers.txt

$Computers 现在是一个数组,每个元素中都包含计算机名称。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯