如何使用Powershell限制复制文件?

时间:2019-10-16 06:24:30

标签: powershell

我要检查第二个文件夹中的.jpg文件。第二个文件夹有一些子文件夹。如果.jpg在第二个文件夹的子文件夹中存在,我将根据基本名称将文件从第一个文件夹复制到第二个文件夹的子文件夹。我可以做这部分参考这个答案 How to copy file based on matching file name using PowerShell?

但是当我从第一个文件夹复制文件时,我想做限制。如果已经将同一文件从第一个文件夹复制到第二个文件夹3次,则不会复制该文件。

这是参考文献中的代码。

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

Get-ChildItem -Path "$OpJob_Path\*\*.jpg" | ForEach-Object {
    $basename = $_.BaseName.Substring(15)
    $job = "$Job_Path\${basename}.png"
    if (Test-Path $job) {
        $timestamp = Get-Date -Format 'yyyyMMddhhmmss'
        $dst = Join-Path $_.DirectoryName "${timestamp}_${basename}.gif"
        Copy-Item $job $dst -Force
    }

enter image description here

任何人都可以帮助我解决这个问题。谢谢。

已更新

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

Get-ChildItem -Path "$OpJob_Path\*\*.jpg" | ForEach-Object {
    $basename = $_.BaseName.Substring(15)
    $job = "$Job_Path\${basename}.png"
    if (Test-Path $job) {
        $timestamp = Get-Date -Format 'yyyyMMddhhmmss'
        $dst = Join-Path $_.DirectoryName "${timestamp}_${basename}.gif"
        $Get = (Get-ChildItem -Name "$OpJob_Path\*\*$basename.jpg*" | Measure-Object).Count
        $Get
        if ($Get -eq "3") {
            Write-Host "Continue Other Process"
            NEXT_PROCESS
        } else {
            Write-Host "Less than 3"
        }
        Copy-Item $job $dst -Force
    }

1 个答案:

答案 0 :(得分:1)

$Get不是哈希表,它也不跟踪已复制的内容。您需要在循环外定义哈希表

$copy_count = @{}
Get-ChildItem -Path "$OpJob_Path\*\*.jpg" | ForEach-Object {
    ...
}

然后在复制文件时进行更新

if ($copy_count[$_.Name] -le 3) {
    Copy-Item ...
    $copy_count[$_.Name]++
} else {
    ...
}