windows PowerShell -为每个通信复制相同的文件

k7fdbhmy  于 2022-12-05  发布在  Windows
关注(0)|答案(1)|浏览(143)

如何使用同一行代码将文件多次复制到文件夹?
我这里有这样的代码:

$TodayDate = Get-Date -Format "dd-MM-yyyy"
$TodayDateSecs = Get-Date -Format "dd-MM-yyyy I hh-mm-ss"

$Sheet01 = "C:\Users\MyUser\Desktop\Sheets"
$Sheet01exists = get-ChildItem $Sheet01 -recurse | where {$_.name -match "Modelo 01 - $TodayDate"} | select name
$Project01 = "C:\Users\MyUser\Desktop\Project 01\Model 01.txt"
$WatchFolder = "C:\Users\MyUser\Desktop\Watch Folder\$ClientName"
$OldSheets = "C:\Users\MyUser\Desktop\Project 01\Old Sheets"
$MoveSheetAfterRender = get-ChildItem $Sheet01 -recurse | where {$_.name -match "Modelo 01 - $TodayDate"} | Move-Item -Destination $OldSheets

If ($Sheet01exists) {
Copy-Item -Path $Project01 -Destination "$WatchFolder\Model 01 - $TodayDateSecs.txt"
$MoveSheetAfterRender
Write-Host "Copiado para Renderização"
}
Else {
Write-Host "Arquivo não encontrado"
}

我的意图是:每次$Sheet01exists返回匹配时,我希望将$Project01中指定的文件复制到$WatchFolder中的文件夹。
问题是,如果有多个文件对应于$Sheet01exists,则$Project01中的文件将只复制一次。
我需要的是将$Project01中的文件复制到$WatchFolder中,以匹配$Sheet01exists中的每个匹配项。也就是说,需要复制并重命名它,以免被覆盖。
我怎样才能做到尽可能干净?

bis0qfac

bis0qfac1#

这里有一种方法可以直接将它连接到Foreach-Object循环:

$TodayDate = Get-Date -Format "dd-MM-yyyy"
$TodayDateSecs = Get-Date -Format "dd-MM-yyyy I hh-mm-ss"

[ref]$i = 0
$Project01   = "C:\Users\MyUser\Desktop\Project 01\Model 01.txt"
$WatchFolder = "C:\Users\MyUser\Desktop\Watch Folder\$ClientName"
$OldSheets   = "C:\Users\MyUser\Desktop\Project 01\Old Sheets"

$Sheet01 = "C:\Users\MyUser\Desktop\Sheets"
Get-ChildItem -Path $Sheet01 -Filter "*Modelo 01 - $TodayDate*" -Recurse | 
    ForEach-Object -Process `
    {
        Copy-Item -Path $Project01 -Destination {
            '{0}\Model 01 - {1}{2}.txt' -f $WatchFolder, $TodayDateSecs, 
                $(
                    if ($i -ne 0) 
                    {
                        '[{0:D2}]' -f $i
                    }
                    $i++
                )
        } -Verbose -WhatIf
        Move-Item -Path $_.FullName -Destination $OldSheets -WhatIf
    }

因为你只是把相同的文件从它们的位置移到$OldSheets上,你可以在循环中通过传递对象路径来完成。至于要复制的文件,因为-Destination接受一个脚本块,你可以创建一个你自己的字符串,递增$i,然后把它附加到路径的末尾,给你[01]..[10]+的效果。

  • 当您口述了您想要的结果后,请删除-WhatIf安全/通用参数。*

相关问题