从文件夹中复制文件,然后删除一些文件,但出现异常

copy files from folder and then delete some files with an exception

我在 C 中有一个名为 Logfolder 的文件夹

C:\LogFolder

它有多个日志,名称如下

errorLogs.log
errorLogs.log.1
errorLogs.log.2
errorLogs.log.3

Transmitlogs.log
Transmitlogs.log.1
Transmitlogs.log.2
Transmitlogs.log.3
Transmitlogs.log.4
Transmitlogs.log.5

Receivelogs.log
Receivelogs.log.1
Receivelogs.log.2
Receivelogs.log.3
Receivelogs.log.4

Dataexchange.log
Dataexchange.log.1

以及许多其他名称不同但扩展名相同的名称,如 .log、.log.1 等。

我只对上面提到的日志感兴趣。

我的目标是复制从 log.1log.10 or 20 所有存在的日志 删除原始文件,异常 .log and .log.1.

到目前为止,我已经取得了以下成就。

$logLocation = "C:LogFolder"
$tempLocation = "C:\Temp\Logs\"

$LogfileName = "errorLogs.log.", "Transmitlogs.log.","Receivelogs.log.","Dataexchange.log."
foreach ($element in $LogfileName) 
{
$NewLogFileName = -join($element,"*")
Copy-Item -Path "$logLocation$NewLogFileName" -Destination $tempLocation
}

我能够复制从 .log.1 开始的所有日志以及所有其他存在的日志。

我的问题是如何在不删除 .log 和 .log.1 的情况下从原始文件夹中删除这些日志

我已经尝试了以下但没有用。

foreach ($element in $LogfileName) 
{
$deleteLogFileName = -join($element,"*")
Remove-Item –path "$logLocation$deleteLogFileName" -exclude *.log, *.log.1
}

您可以通过选择性地仅将文件*.log.1复制到目标文件夹并移动其他文件来做到这一点。这样可以避免您之后从源位置删除文件。

这里最重要的是获取文件列表

  • 有一个数字扩展
  • 有一个像 'errorLogs.log'、'Transmitlogs.log'、'Receivelogs.log' 或 'Dataexchange.log'
  • 这样的基本名称

尝试

$logLocation  = "C:\LogFolder"
$tempLocation = "C:\Temp\Logs"

# if the destination folder does not exist yet, creatre it first
if (!(Test-Path -Path $tempLocation -PathType Container)) {
    $null = New-Item -Path $tempLocation -ItemType Directory
}

# get an array of objects of the files where the extension ends in a numeric value
# and where the basename is either 'errorLogs.log', 'Transmitlogs.log', 'Receivelogs.log'
# or 'Dataexchange.log'.
$files = Get-ChildItem -Path $logLocation -Filter '*.log*' -File | 
         Where-Object {$_.Name -match '^(errorLogs|Transmitlogs|Receivelogs|Dataexchange)\.log\.\d+$' } | 
         Select-Object FullName, @{Name = 'Number'; Expression = {[int]($_.Name.Split(".")[-1])}}

foreach ($file in $files ) {
    if ($file.Number -eq 1) {
        # this file should be copied
        Copy-Item -Path $file.FullName -Destination $tempLocation -Force
    }
    else {
        # the others are to be moved
        Move-Item -Path $file.FullName -Destination $tempLocation -Force
    }
}