使用 Powershell 从多个文件夹复制特定子文件夹

问题描述

我正在尝试做一些日志备份,并努力使用 ps1 命令,它可以为我做到这一点。

我有这样的文件夹结构:

folder_root/
├── sub_a/
│   ├── Logs
│   ├── bootstrap.min.css
│   ├── Configuration
├── sub_b/
│   ├── Logs
│   └── Settings
└── sub_c/
    ├── Logs
    ├── Application
    ├── class.js
    └── other-file.html

我只需要从所有子目录中提取 Logs 文件夹并将其复制到备份文件夹(存在)尊重现有文件夹结构:

Backup-03-24/
├── sub_a/
│   └── Logs
├── sub_b/
│   └── Logs
└── sub_c/
    └── Logs

如何使用 Powershell 实现这一点?我正在尝试在路径中使用带有通配符的 copy-Item cmdlet,但它不起作用。

copy-Item -Destination "C:\folder_root\*\Logs"

解决方法

这太难了。只需循环使用 Get-ChildItem 获得的目录,对要复制的文件夹名称使用过滤器:

$sourcePath  = 'D:\folder_root'
$Destination = 'D:\Backup-03-24'
Get-ChildItem -Path $sourcePath -Filter 'Logs' -Recurse -Directory |
    ForEach-Object {
        $targetPath = Join-Path -Path $Destination -ChildPath $_.Parent.FullName.Substring($sourcePath.Length)
        $null = New-Item -Path $targetPath -ItemType Directory -Force
        $_ | Copy-Item -Destination $targetPath -Recurse -Force
    }

结果:

D:\BACKUP-03-24
+---sub_a
|   \---Logs
+---sub_b
|   \---Logs
\---sub_c
    \---Logs

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...