使用文件和文件夹

您所在的位置:网站首页 powershell如何粘贴 使用文件和文件夹

使用文件和文件夹

2024-01-31 18:19| 来源: 网络整理| 查看: 265

使用文件和文件夹 项目 01/20/2024

在 PowerShell 驱动器中导航和操作其中的项,类似于操作 Windows 磁盘驱动器上的文件和文件夹。 本文介绍如何使用 PowerShell 处理特定文件和文件夹操作任务。

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

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

Get-ChildItem -Path C:\ -Force

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

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

Get-ChildItem 可以使用 Path 、Filter 、Include 和 Exclude 参数来筛选项,但这些通常只以名称为依据。 使用 Where-Object,还可以执行基于项的其他属性的复杂筛选。

下面的命令用于查找上次于 2005 年 10 月 1 日之后修改,并且不小于 1 兆字节,也不大于 10 兆字节的 Program Files 文件夹中的所有可执行文件:

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.exe 和 robocopy.exe 等本机命令来复制文件。

创建文件和文件夹

创建新项的操作方式在所有 PowerShell 提供程序上都是一样的。 如果某个 PowerShell 提供程序具有多个类型的项(例如,用于区分目录和文件的 FileSystem 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 立即可见。 若要创建从文件资源管理器可见的映射驱动器,请使用 Persist 参数。 不过,只有远程路径才能与 Persist 一起使用。

将文本文件数据读取到数组中

文本数据更常见的存储格式之一是采用文件形式,其中单独的行被视为不同的数据元素。 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 获取列表信息最为有用。 例如,你可能会在文件 C:\temp\domainMembers.txt 中存储计算机名或 IP 地址的列表,文件的每一行上都有一个名称。 可以使用 Get-Content 来检索文件内容,并将它们放置在变量 $Computers 中:

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

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



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3