首页 > 解决方案 > Powershell脚本查找文件夹并复制到另一个文件夹

问题描述

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

Source Dir :- C:\unzip\Content\D_C\a\1\s\src\prj\obj\Release\Package\PackageTmp
Inconsistent Path :- \D_C\a\1\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

标签: powershellpowershell-2.0

解决方案


分析

看起来你快到了。您的脚本只是找到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位置存储在一个变量中。然后我可以指定我想PackageTmp通过使用-Path "$($PackageTmp.FullName)\*"参数复制目录内的所有内容,注意通配符的使用\*。这不会PackageTmp像您要求的那样复制目录。

如此有效地代替这样做:

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

我们只是这样做:

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

推荐阅读