如何使用PowerShell根据匹配的文件名复制文件?

时间:2019-10-01 06:37:57

标签: powershell

enter image description here

我要检查第二个文件夹中的.jpg文件。第二个文件夹有一些子文件夹。 如果.jpg位于第二个文件夹的子文件夹中,我将复制第一个文件夹中的文件 根据基本名称转到第二个文件夹的子文件夹。 我尝试了这段代码,可以检查.jpg的存在,然后将文件匹配到第一个文件夹文件。 我的问题是,如果.jpg文件大于1,我将无法复制,并且在复制文件时,我无法指定应复制的子文件夹。

我尝试过:

$JobInit  = "D:\Initial"
$JobError = "D:\Process"

if (Test-Path -Path "$JobError\*\*.jpg") {
    Write-Host "Error Exist"
    $L_Name = "15"
    $ErrorFile = Get-ChildItem -Path "$JobError\*\*.jpg" |
                 ForEach-Object { $_.BaseName.Substring($L_Name) }

    $Path_ = Get-ChildItem -Path "$JobError\*\*.jpg"
    $Split = Split-Path -Path $Path_

    $NewJob = @(Get-ChildItem -Path "$JobInit\*.png" -File -Recurse |
              Where-Object { "$ErrorFile" -contains $_.BaseName })
    Write-Host $NewJob

    $Timestamp = Get-Date -Format yyyyMMddhhmmss
    $CopyJob = Copy-Item $NewJob -Destination "$Split"
    $Rename = Get-ChildItem "$Split\*.png" |
              Rename-Item -NewName {"$Timestamp`_" + $_.Name.Replace('.png','.gif')}
}

1 个答案:

答案 0 :(得分:1)

假设我正确理解了您的问题,并且如果它们在“初始”文件夹中具有相应的PNG文件,则希望替换“过程”文件夹中的现有JPEG文件,以下方法可以解决问题:

$L_Name = 15
Get-ChildItem -Path "$JobError\*\*.jpg" | ForEach-Object {
    $basename = $_.BaseName.Substring($L_Name)

    $png = "$JobInit\${basename}.png"
    if (Test-Path $png) {
        $timestamp = Get-Date -Format 'yyyyMMddhhmmss'
        $dst = Join-Path $_.DirectoryName "${timestamp}_${basename}.jpg"
        Copy-Item $png $dst -Force
    }
}