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



如何使用同一行代码将文件多次复制到文件夹中?

这里有这样的代码:

$TodayDate = Get-Date -Format "dd-MM-yyyy"
$TodayDateSecs = Get-Date -Format "dd-MM-yyyy I hh-mm-ss"
$Sheet01 = "C:UsersMyUserDesktopSheets"
$Sheet01exists = get-ChildItem $Sheet01 -recurse | where {$_.name -match "Modelo 01 - $TodayDate"} | select name
$Project01 = "C:UsersMyUserDesktopProject 01Model 01.txt"
$WatchFolder = "C:UsersMyUserDesktopWatch Folder$ClientName"
$OldSheets = "C:UsersMyUserDesktopProject 01Old Sheets"
$MoveSheetAfterRender = get-ChildItem $Sheet01 -recurse | where {$_.name -match "Modelo 01 - $TodayDate"} | Move-Item -Destination $OldSheets
If ($Sheet01exists) {
Copy-Item -Path $Project01 -Destination "$WatchFolderModel 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中的每个匹配。也就是说,为了不被覆盖,它需要被复制和重命名。

我怎样才能做得尽可能干净?

有一种方法可以让它直接进入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:UsersMyUserDesktopProject 01Model 01.txt"
$WatchFolder = "C:UsersMyUserDesktopWatch Folder$ClientName"
$OldSheets   = "C:UsersMyUserDesktopProject 01Old Sheets"
$Sheet01 = "C:UsersMyUserDesktopSheets"
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接受scriptblock,您可以创建一个自己的字符串,增加$i,然后将其附加到路径的末尾,从而获得[01]..[10]+效果。


删除-WhatIf安全/通用参数,当你已经指示这些是你所追求的结果。

最新更新