在同一文件夹中找到最新的文件名并复制为重命名的文件

时间:2014-03-17 14:39:43

标签: powershell

我看到了一些类似的帖子,但遗憾的是到目前为止这对我来说并不适用。我想获取最新的备份文件(随机生成),然后将文件复制并重命名为具有固定名称的同一文件夹,以便我可以安排还原作业。

备份文件如下:

Fin123.bak
Fin125.bak
Sales456.bak
HRF100.bak

我想获取最新文件(按创建日期),然后复制并重命名文件,如Fin.bak。在上面的文件中,Fin125.bak是最新的备份文件,我想将其复制并重命名为Fin.bak。 powershell脚本应该忽略所有其他文件,如Sales,HR等。只有以Fin开头且具有最新创建日期的文件。

非常感谢任何帮助。 谢谢 穆罕默德

2 个答案:

答案 0 :(得分:6)

这应该可以解决问题。

$bak_path = "path_to_backup_folder"
get-childitem -path $bak_path -Filter "Fin?*.bak" | 
    where-object { -not $_.PSIsContainer } | 
    sort-object -Property $_.CreationTime | 
    select-object -last 1 | 
    copy-item -Destination (join-path $bak_path "FIN.BAK")

经历它;

$bak_path = "path_to_backup_folder"将备份目录的路径声明为常量。

get-childitem -path $bak_path -Filter "Fin?*.bak"返回文件夹$ bak_path中与过滤器匹配的一组对象" Fin? .bak"。 '?'用于确保只有在' fin'之间至少有一个字符的文件。和' .bak'匹配。

where-object { -not $_.PSIsContainer }删除所有目录对象(以防万一)。

sort-object -Property $_.CreationTime对列表进行排序,以使最新文件在集合中的最后一个。

select-object -last 1选出最后一项(即最新文件),最后

copy-item -Destination (join-path $bak_path "FIN.BAK")将最后一项作为FIN.BAK复制到同一目录

答案 1 :(得分:1)

这将用于抓取.bak扩展名的最新文件。

$OriginalDir = "E:\"
$BackupDir = "H:"
#After the -Name can be changed for whatever you need to backup.
$LatestFile = Get-ChildItem -Path $dir -Name *.bak | Sort-Object LastAccessTime -Descending | Select-Object -First 1
Copy-Item -path "$OriginalDir\$LatestFile" "$BackupDir\$LatestFile"