从文件夹中复制文件,然后删除一些文件,但出现异常
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.1
到 log.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
}
}
我在 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.1
到 log.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
}
}