Noob到PowerShell,复制文件夹中的文件

时间:2014-08-28 07:00:21

标签: powershell copy compare directory

很抱歉,如果这是一个非常简单的过程。

我有一个文件夹结构,在根级别(空)有~4,000个目录,另一个位置有另一组带有数据的文件夹。

我想只将location2文件夹中的文件复制到location1中的文件夹,即\ FolderABC123 \ Archive,但仅限于目录名称匹配。我确定Windows资源管理器副本,或xcopy或其他一些实用程序可以更轻松地完成它,但我想深入了解PowerShell,并认为这将是一个良好的开端?

谢谢你。 克里斯

2 个答案:

答案 0 :(得分:0)

您可以使用powershell 在开头设置路径。

$strSouce = "Path"
$strDestination = "Path"

然后在源中搜索foreach文件。

Foreach ($objFile in Get-ChildItem -Path $strSouce -Recurse | Where-Object -FilterScript {$_.PsIsCointainer -eq $false}) {]

将每个项目从源复制到目标。对于目的地,您必须将源路径替换为destiantion路径。

Copy-Item -Path $objFile.FullName -Destination $objFile.FullName.Replace("$strSouce", "$strDestination")


为了您的学习,请将代码段设置到正确的位置。

答案 1 :(得分:0)

    # Fist, get a list of all target directories (i.e.: directories under $destination that have a match in $source)

    $targetDirs = dir -Path $source -Recurse -Force |
        ?{ $_.psIsContainer } |
        %{ $_.FullName -replace [regex]::Escape($source), $destination } |
        %{ if (Test-Path $_) { $_ }}

    # Then, enumerate all files from source and copy them only if the corresponding target dir exists

    dir -Path $source -Recurse -Force | 
        ?{ -not $_.psIsContainer } |
        ?{ Test-Path (Split-Path ($_.FullName -replace [regex]::Escape($source), $destination) -Parent) } |
        copy -Force -Destination { $_.FullName -replace [regex]::Escape($source), $destination }