如何使用同一行代码将文件多次复制到文件夹中?
这里有这样的代码:
$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
安全/通用参数,当你已经指示这些是你所追求的结果。