自动将新文件从一个文件夹复制到另一个文件夹

问题描述 投票:0回答:1

我遇到问题,不知道如何自己解决。我在谷歌上也没有找到任何东西。

我有一个名为 Trace 的文件夹,在这个文件夹中,多个设备保存了它们的跟踪文件。当设备运行时,会添加新的跟踪文件。跟踪文件全部保存为“xxxxxx.trace”。我编写了一个 Powershell 脚本,该脚本会自动将所有 .trace 文件转换为 txt 文件,然后将这些 txt 文件合并为一个 txt 文件。合并后txt文件被删除,这样它们就不会被多次复制到合并后的txt文件中。

这是我的 Powershell 脚本

while (1)
{
Get-ChildItem -Path "C:\xxx\xxx\xxx\Trace2"*.trace | Rename-Item -NewName { $_.name -Replace '\.trace$','.txt' }
C:\xxx\xxx\xxx\Powershell\Combine-Files.ps1 -output "C:\xxx\xxx\xxx\Test\test.txt" -source "C:\xxx\xxx\xxx\Trace2\" -filter "*.txt" -append 
Get-ChildItem C:\xxx\xxx\xxx\Trace2\*.txt -File | Remove-Item -Force
Start-Sleep -Seconds 10
}

该脚本有效,但问题是我不允许从原始跟踪文件夹中删除跟踪文件。因此,我需要第二个文件夹。从现在开始,我将把原始跟踪文件夹称为“folder1”,将第二个文件夹称为“folder2”。

这些是folder2 必须满足的条件:

-folder1 中已有的或将添加到其中的所有文件都必须复制到folder2。

-每个文件只允许从文件夹 1 复制到文件夹 2 一次。因此,如果删除了folder2中的文件,则无法再次将其从folder1复制到folder2。

如果这是不可能的,将文件夹 1 中每个新添加的文件复制到文件夹 2 的脚本或程序将是另一种选择。然后我会手动复制文件夹 1 中已有的文件。

我找到了这个脚本,它几乎满足了我的需要,但是因为文件几乎立即从folder2中删除,所以无法比较folder1和folder2中的文件并查看文件之前是否已被复制。

我已经尝试过 robocopy /mir。但是,robocopy /mir 将从folder2 中删除的所有文件复制回folder2,因为robocopy /mir 创建了folder1 的精确映像。

powershell directory copy scheduled-tasks windows-scripting
1个回答
0
投票

实施此解决方案

### SET FOLDER TO WATCH + FILES TO WATCH
$watcher = New-Object System.IO.FileSystemWatcher
$watcher.Path = '"C:\xxx\xxx\xxx\Trace2'
$watcher.Filter = '*.trace'
$watcher.EnableRaisingEvents = $true  

### DEFINE ACTIONS AFTER AN EVENT IS DETECTED
$action = { 
    # get the full path of the file that has been created
    $FileCreated = $Event.SourceEventArgs.FullPath

    # wait one second after the creation of the file to make sure it's completely written. It shouldn't be an issue most of the time so test if you can remove it.
    Start-Sleep -Seconda 1

    # No need for other files you can get the content from the source
    Get-Content -Path $FileCreated | Add-Content 'C:\xxx\xxx\xxx\Test\test.txt' 
}    

### DECIDE WHICH EVENTS SHOULD BE WATCHED 
Register-ObjectEvent $watcher 'Created' -Action $action
# other events can have the same or different actions
# Register-ObjectEvent $watcher "Changed" -Action $action
# Register-ObjectEvent $watcher "Deleted" -Action $action
# Register-ObjectEvent $watcher "Renamed" -Action $action
© www.soinside.com 2019 - 2024. All rights reserved.