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

[玩转系统] Copy-Item 和 Remove-Item:自动复制和删除操作

作者:精品下载站 日期:2024-12-14 07:27:16 浏览:13 分类:玩电脑

Copy-Item 和 Remove-Item:自动复制和删除操作


可能会发生文件必须定期删除或复制到其他地方的情况。这本身没有问题,只要您了解一点脚本编写即可。但很多人并没有做到这一点,他们只是购买下一个产品,希望不是 Total Commander,而是“Super Copy”。然后将同时安装询问工具栏。后来,关于Windows的漏洞的讨论也很多。讽刺关闭。

PowerShell 提供全面的 Item cmdlet。我称它们为“物品家族”。


Get-Command -Noun Item

[玩转系统] Copy-Item 和 Remove-Item:自动复制和删除操作

在本文中,我想重点介绍两个 cmdlet:Copy-Item 和 Remove-Item。

复制项目

以下命令将文件 C:\Temp\pwd.txt 复制到 C:\Temp1\。


Copy-Item -Path C:\Temp\pwd.txt -Destination C:\Temp1\ -Verbose

[玩转系统] Copy-Item 和 Remove-Item:自动复制和删除操作

详细参数可以省略。它只是为了显示发生了什么。

复制文件夹和子文件夹

复制目录的全部内容(包括子目录)怎么样?为此,请使用 Recurse 参数。


Copy-Item -Path C:\Temp\ -Destination C:\Temp1\ -Recurse -Verbose

仅复制文件

对于仅复制没有文件夹和文件夹结构的文件,我可以想到两个示例。

将 Get-ChildItem 与 File 参数结合使用,并通过管道将所有文件发送到 Copy-Item。


Get-ChildItem C:\Temp\ -File -Recurse | Copy-Item -Destination C:\Tempnew\

[玩转系统] Copy-Item 和 Remove-Item:自动复制和删除操作

或者使用Where-Object 并指定不应复制文件夹(这意味着容器)。


Get-ChildItem "C:\Temp\*" -Force -Recurse | Where-Object { -not $_.PSIsContainer } | Copy-Item -Destination C:\Tempnew\ -Verbose

[玩转系统] Copy-Item 和 Remove-Item:自动复制和删除操作

复制特定文件类型的文件

比如说,我们只想复制文本文件,这意味着所有文件扩展名为 txt 的文件。为此,我们可以使用 Copy-Item cmdlet 中包含的过滤器参数。

以下命令复制所有文本文件,但不复制文件夹本身。请注意文件夹名称和过滤器后面的星号 *。


Copy-Item -Path C:\temp\* -Destination C:\Temptxt -Filter '*.txt'

[玩转系统] Copy-Item 和 Remove-Item:自动复制和删除操作

在远程会话中复制

你知道PowerShell远程连接吗? Enter-PSSession 和 New-PSSession 是远程处理方面的好朋友。我的两个例子:

将所有文件夹和文件从 dc01 上的 C:\Temp 复制到 client01 上的 C:\Temp。请注意,我登录的是 dc01。 client01 上的远程管理已启用 (winrm qc)。


Copy-Item -Path C:\Temp\ -Destination C:\ -ToSession (New-PSSession -ComputerName Client01) -Recurse

[玩转系统] Copy-Item 和 Remove-Item:自动复制和删除操作

要复制回所有这些文件,请使用 FromSession 参数。


Copy-Item -Path C:\Temp\ -Destination C:\ -FromSession (New-PSSession -ComputerName Client01) -Recurse

有关复制项目的更多信息,请参见此处:

https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/copy-item?view=powershell-6

除去项目

cmdlet Remove-Item 使您能够删除项目,这不仅意味着文件,还意味着所有其他项目。在 PowerShell 中,一切都是项目和对象!


Remove-Item -Path C:\Temp\hotfixes.htm -Verbose

为了向您展示如何删除注册表项,我只想使用“删除项目帮助”中的示例。此命令删除 OldApp 注册表项。


Remove-Item hklm:\software\mycompany\OldApp -Recurse

要仅删除文件夹及其子文件夹中的 txt 文件,请运行


Remove-Item -Include *.txt -Recurse -Path C:\Temp1\ -Verbose

[玩转系统] Copy-Item 和 Remove-Item:自动复制和删除操作

自动复制和删除作业

现在我们进入正题。正如标题所说,我想向您展示如何自动化这一切。假设我们有以下场景。

  • 文件夹及其子文件夹中的所有文件应作为备份复制到目标文件夹
  • 之后应删除源文件夹中的文件。我们应该注意源文件夹的文件夹结构保持不变,这意味着我们不能删除文件夹结构
  • 该作业必须在每周六上午 11:00 运行

此命令将所有文件从 C:\Original 及其子文件夹复制到 C:\Destination。


Copy-Item -Path C:\Original\* -Destination C:\Destination\ -Recurse -Force

此命令将删除 C:\Original 中的所有文件。


Get-ChildItem -Path C:\Original\ -Include *.* -Recurse | Remove-Item -Force

[玩转系统] Copy-Item 和 Remove-Item:自动复制和删除操作

为什么不删除项目 -包括 *.* -递归?嗯,我发现组合过滤器和递归时存在一些问题:

[玩转系统] Copy-Item 和 Remove-Item:自动复制和删除操作

https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/remove-item?view=powershell-6

回到主题。我现在将文件保存为 C:\Temp\OrigDest.ps1。是时候创建一个每周六上午 11:00 运行的计划任务了。


$Action=New-ScheduledTaskAction -Execute 'powershell' -Argument 'C:\Temp\OrigDest.ps1'
$Trigger=New-ScheduledTaskTrigger -Weekly -DaysOfWeek Saturday -At 11am
$Set=New-ScheduledTaskSettingsSet
$Principal=New-ScheduledTaskPrincipal -UserId 'a-d\administrator' -LogonType S4U
$Task=New-ScheduledTask -Action $Action -Trigger $Trigger -Settings $Set -Principal $Principal
Register-ScheduledTask -TaskName "Copy Orig to Dest" -InputObject $Task -Force

[玩转系统] Copy-Item 和 Remove-Item:自动复制和删除操作

就是这样。自动化完成?

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

取消回复欢迎 发表评论:

关灯