将文件夹结构复制到多个文件夹的脚本

将文件夹结构复制到多个文件夹的脚本

场景:我想将文件夹结构(减去根文件夹)复制到一系列现有文件夹中。

以下是我的脚本:

$folders = Get-ChildItem C:\test

foreach ($folder in $folders.name){
Copy-Item -Path "C:\folder structure\\*" -Destination C:\test\$folder -Recurse -Force -Verbose
}

此脚本可以正常工作,但它也会将根文件夹复制到现有文件夹。-Path 中的 * 应确保不会复制根文件夹。我遗漏了什么吗?

答案1

这对我来说是可行的,因为结构如下,我想将 /bar/ 的内容复制到 /foo/ 中的每个文件夹中:

C:\FOO
├───foo1
└───foo2
C:\BAR
├───bar1
│       test1.txt
└───bar2
        test2.txt

对于代码来说你已经很接近了,但是如果你只想要文件夹内容那么就只抓取内容:

foreach ($folder in ( Get-ChildItem c:\foo ) ) { 
    Get-ChildItem C:\bar | 
    Copy-Item -Recurse -Destination "C:\foo\$($folder.Name)"
}

结果:

C:\FOO
├───foo1
│   ├───bar1
│   │       test1.txt
│   └───bar2
│           test2.txt
└───foo2
    ├───bar1
    │       test1.txt
    └───bar2
            test2.txt
C:\BAR
├───bar1
│       test1.txt
└───bar2
        test2.txt

从技术上讲,这与在文件夹路径后使用相同*。这对我来说也有效,无需创建根文件夹。通过手动运行检查您是否没有使用单引号以及命令是否成功完成copy-item "C:\bar\\*" -recurse C:\foo\foo1 -whatif。仔细检查您的根文件夹中是否实际上没有同名的文件夹。

相关内容