用于查找文件夹并复制到另一个文件夹的 Powershell 脚本

Powershell script to find a folder and copy to another folder

我的目录路径很长。嵌套文件夹值根据项目名称不断变化。但最后一个目录 PackageTmp 没有改变,期待将文件从 PackageTmp 复制到另一个目录。我想将所有子文件夹和文件从 C:\unzip\Content\D_C\a\s\src\prj\obj\Release\Package\PackageTmp 复制到 C:\deploy。我的代码正在复制到 C:\deploy\PackageTmp.

Source Dir :- C:\unzip\Content\D_C\a\s\src\prj\obj\Release\Package\PackageTmp
Inconsistent Path :- \D_C\a\s\src\prj\obj\Release\Package\
Target Dir :- C:\deploy\
Non working code :- Get-ChildItem C:\unzip\ -Filter PackageTmp -Recurse | where {($_.psiscontainer)}| Copy-Item -Destination C:\deploy\ -Recurse -filter * -Force

分析

看起来你快到了。您的脚本只是找到 PackageTmp 目录,然后将其向下传递到最终复制到目标、目录和内容的管道中。诀窍是,一旦找到 PackageTmp 目录,就可以使用通配符获取 PackageTmp 目录中的所有内容,并将其复制到目标位置。

代码

我调整了你的非工作代码,希望这对你有用。

# Get the PackageTmp directory
$PackageTmp = Get-ChildItem C:\unzip\ -Filter PackageTmp -Recurse | Where-Object {($_.psiscontainer)}

# Print the FullName of the PackageTmp directory
Write-Host "PackageTmp: $($PackageTmp.FullName)"

# Recursively copy everything in the PackageTmp directory to our destination directory
Copy-Item -Path "$($PackageTmp.FullName)\*" -Destination C:\deploy\ -Recurse -filter * -Force 

说明

我将 PackageTmp 位置存储在一个变量中。然后我可以指定我想通过使用 -Path "$($PackageTmp.FullName)\*" 参数复制 PackageTmp 目录中的所有内容,注意通配符 \* 的使用。这不会像您请求的那样复制 PackageTmp 目录。

如此有效而不是这样做:

Copy C:\unzip\Content\D_C\a\s\src\prj\obj\Release\Package\PackageTmp -> C:\deploy\

我们正在这样做:

Copy C:\unzip\Content\D_C\a\s\src\prj\obj\Release\Package\PackageTmp\* to C:\deploy\